我使用SimpleXML来解析我的xml文件。我循环遍历它,在每个节点中我需要获取一个特定标记的值。这是一个例子
<node>
<child1></child1>
<findme></findme>
<child2></child2>
</node>
<node>
<child1>
<findme></findme>
</child1>
<child2></child2>
</node>
<node>
<child1></child1>
<child2>
<another>
<findme></findme>
</another>
</child2>
</node>
在每个节点中,我需要获得findme
标记。但我不知道它可以在哪个级别,我所知道的只是一个标记名
答案 0 :(得分:1)
您需要使用XPath
来查找目标元素,因为您不知道目标标记的级别。 Php SimpleXMLElement
类具有xpath
方法,可以按XPath
找到元素。
$xml = new SimpleXMLElement($xmlStr);
$result = $xml->xpath('//findme');
foreach($result as $elem)
{
echo $elem;
}
您可以在demo
中查看结果修改强>
如果要在另一个元素中找到特定元素,则需要使用DOMDocument
类。
$dom = new DOMDocument();
$dom->loadXML($xmlStr);
$nodes = $dom->getElementsByTagName('node');
foreach($nodes as $node)
{
echo $node->getElementsByTagName("findme")->item(0)->textContent;
}
您可以在demo
中查看结果答案 1 :(得分:1)
我想出的唯一决定是使用这个递归函数
foreach($xml as $prod){
...
$findme = getNode($prod, 'fabric');
...
}
function getNode($obj, $node) {
if($obj->getName() == $node) {
return $obj;
}
foreach ($obj->children() as $child) {
$findme = getNode($child, $node);
if($findme) return $findme;
}
}
<强>更新强>
同样如评论中所建议的那样,我们可以像这样使用DOMDocument类:
$dom = new DOMDocument();
$dom->LoadXML($xmlStr);
$nodes = $dom->getElementsByTagName('node');
foreach($nodes as $node)
{
$findme = $node->getElementsByTagName("findme")->item(0);
echo $findme->textContent."\r";
}