2014-02-18 45 views
6

我有需要随时修改的变量文档。例如,我可以有一个文件如下:如何在PHP的DOMDocument中获取特定标签?

<!--?xml version="1.0"?--> 
<item> 
    <tag1></tag1> 
</item> 
<tag2> 
    <item></item> 
    <item></item> 
</tag2> 

这是非常简单的,但我有不同级别的同名标签。我想获得'tag2'内的项目标签。我给出的文件中的实际标签具有唯一的ID来区分它们以及其他一些属性。我需要找到标签,将其注释掉,然后保存xml。我能够获取DOMDocument以返回'tag2'节点,但我不确定如何访问该结构中的项目标记。

回答

4

这是什么样的问题,PHP的DOMDocument类擅长。第一负载使用loadHTML()方法XML字符串,然后使用XPath表达式来遍历DOM树:

$dom = new DOMDocument; 
libxml_use_internal_errors(true); 
$dom->loadHTML($html); 

$xpath = new DOMXPath($dom); 

$item_tags = $xpath->query('//tag2/item'); 
foreach ($item_tags as $tag) { 
    echo $tag->tagName, PHP_EOL; // example 
} 

Online demo

+0

是的 - 我通常会通过'getElementsByTagName()'这样的XPath进入XPath。 – CD001

+0

但我建议评估(),而不是查询()。它也允许返回标量的xpath表达式。 – ThW

1
<?php 
$tag= new DOMDocument(); 
$tag->loadHTML($string); 

foreach ($tag->getElementsByTagName("tag") as $element) 
{ 
    echo $tag->saveXML($element); 
} 
?> 

可能会帮助你。尝试它

+0

用'的getElementsByTagName()的问题'以这种方式的是,它不'真的不在乎这些标签出现在哪里 - 所以'getElementsByTagName('item')'实际上会匹配所有的'/ item'和'/ tag2/item',这与AI之后的OP不一样。 – CD001

0
$DOMNode -> attributes -> getNamedItem('yourAttribute') -> value; 
相关问题