如何在php中使用dom从这个xml中获取值?

时间:2011-03-02 12:03:28

标签: php xml

如何从以下xml代码中获取a,b and c的值?

<result name="response" f="139" c="0">
−
<doc score="5.06756" pos="0">
<snippet name="a" highlighted="yes">example</snippet>
<snippet name="b" highlighted="yes">bexample</snippet>
<snippet name="c">cexample</snippet>


</doc>
</result> 

我尝试打印节点,但失败了:

$xmlDoc = new DOMDocument();
$xmlDoc->load($content);

$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
  {
  print $item->nodeName . " = " . $item->nodeValue . "<br />";
  }

谁能告诉我如何解析它?我不能使用简单的xml,所以我要转向Dom。

1 个答案:

答案 0 :(得分:1)

使用DOM可以使用几种不同的方法来提取信息。
例如,您可以使用:


作为示例,这里是一部分代码,演示了如何使用第一个解决方案来提取所有<snippet>标记:

$snippets = $xmlDoc->getElementsByTagName('snippet');
foreach ($snippets as $tag) {
  echo $tag->getAttribute('name') . ' = ' . $tag->nodeValue . '<br />';
}

你得到这个输出:

a = example
b = bexample
c = cexample


而且,作为另一个例子,这里有一个演示如何使用第二个解决方案的解决方案,对XML数据进行更复杂的查询 - 在这里,提取<snippet>标签,因为它是name属性值a

$xpath = new DOMXPath($xmlDoc);
$snippetsA = $xpath->query('//snippet[@name="a"]');
if ($snippetsA->length > 0) {
  foreach ($snippetsA as $tag) {
    echo $tag->getAttribute('name') . ' = ' . $tag->nodeValue . '<br />';
  }
}

只能获得一个结果 - 相应的标签:

a = example

从这里开始,可能性几乎是无限的; - )