PHP XMLNode,孙代属性值的DOMnode Xpath选择谓词

时间:2018-09-05 12:11:18

标签: php xml dom xpath

我有一些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内容并不总是有用的。

1 个答案:

答案 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";