如何读取所有属性 xml:lang 价值观?有时我不知道XML数据中定义了多少种语言。

<?xml version="1.0" encoding="UTF-8"?>
<offer>
  <products>
    <product>
      <description>
        <name xml:lang="eng">English translation</name>
        <name xml:lang="lat">Latvian translation</name>
      </description>
    </product>
    <product>
      <description>
        <name xml:lang="eng">The same English</name>
        <name xml:lang="pol">And Polish language</name>
      </description>
    </product>
  </products>
</offer>

我可以 PHP 中的 xml:lang 解析 通过在 xpath 中添加精确的语言代码

print_r($xml->xpath('products/product/description/name[@xml:lang = "eng"]'));

但我需要将所有 xml:lang 属性值添加到解析的数组中。

可以用 PHP SimpleXML 来完成吗?

有帮助吗?

解决方案

那这个呢:

$nodes = $xml->xpath('products/product/description/name[@xml:lang]');

将返回一个数组 <name>-节点。

如果不是这样,请准确说明您想要的结果。

编辑

尝试这个来获得 xml:lang 仅属性:

$langs = $xml->xpath("products/product/description/name[@xml:lang]/@xml:lang");
// $lang is an array of simplexml-elements, transform the values to string like this:
$langs = array_map("strval", $langs);

其他提示

抱歉,我不是 100% 支持 SimpleXML,但我知道 文档 可以做你想做的事。希望这对您有用:

$xmlstring = '<?xml version="1.0" encoding="UTF-8"?>
<offer>
  <products>
    <product>
      <description>
        <name xml:lang="eng">English translation</name>
        <name xml:lang="lat">Latvian translation</name>
      </description>
    </product>
    <product>
      <description>
        <name xml:lang="eng">The same English</name>
        <name xml:lang="pol">And Polish language</name>
      </description>
    </product>
  </products>
</offer>';

$dom = new DOMDocument();
$dom->loadXML($xmlstring); //or $dom->load('filename.xml');

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//products/product/description/name');

foreach ($nodes as $node) {
    echo 'Language: ' . $node->getAttribute('xml:lang') . '<br />';
    echo 'Value: ' . $node->nodeValue . '<br /><br />';
}

您可以将 $node->getAttribute('xml:lang') 分配给变量并运行一些检查以查看它是否与 'eng' 或您需要的任何内容匹配。

我像您在原始帖子中一样使用了 xpath,但您也可以使用 $dom->getElementsByTagName('name') 并以大致相同的方式访问值和属性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top