如何从以下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。
答案 0 :(得分:1)
使用DOM可以使用几种不同的方法来提取信息。
例如,您可以使用:
DOMDocument::getElementsByTagName
,提取具有特定名称的所有标记。DOMXPath
,用于更复杂的查询。
作为示例,这里是一部分代码,演示了如何使用第一个解决方案来提取所有<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
从这里开始,可能性几乎是无限的; - )