我有一些xml
<div> First Element
<div>
<level3 name="fred">
</level3>
</div>
</div>
<div> Second Element
<div>
<level3 name="dave">
</level3>
</div>
</div>
<div> Third Element
<div>
<level3 name="jim">
</level3>
</div>
</div>
<div> Fifth Element
<div>
<level3 name="mike">
</level3>
</div>
</div>
我想根据级别3的孙代名称从特定的顶级div元素中提取xml(作为字符串,包括xml标签)。
因此,要获得名称为jim的level3节点上方的顶部div,我一直在关注以下内容:
$sname="jim";
$spath = new DOMXPath($doc);
// Find a div with a child div with a level3 with a matching attribute name.
$spexp = "//div[./div/level3[contains(@name,\"$sname\")]]";
$story = $spath->evaluate("$spexp");
echo $story->item(0)->nodeValue . "\n";
我尝试了各种组合-包括肯定存在基本xslt的谓词中的“存在”,但在PHP(!)中没有。
我在Google上搜索了很多负载...但是没有超过直接级别的谓词没有出现,而且PHP的xpath似乎有其独特的风格,因此一般的XPath内容并不总是有用的。
答案 0 :(得分:0)
XPath正常,只是不需要了dict(....arguments)
中的第一位。
要输出XML,您还需要在要导出所有XML标签的节点上使用[
...
saveXML()
给......
$sname="jim";
$spath = new DOMXPath($doc);
// Find a div with a child div with a level3 with a matching attribute name.
$spexp = "//div[div/level3[contains(@name,\"$sname\")]]";
$story = $spath->evaluate("$spexp");
echo $doc->saveXML($story->item(0)). "\n";