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

问题描述 投票:0回答:1

我有一些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>

我想从特定的顶级div元素中提取xml(作为一个字符串,包括xml标记),该元素基于它在level3的孙子名称。

因此,要获得名为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";

我尝试了各种组合 - 包括谓词中的'exists',我确信它是基本的xslt,但不是PHP(!)。

我已经google了加载...但是直到最后级别的谓词还没有出现,而且似乎PHP的xpath有它自己的味道,所以一般的XPath东西并不总是有用。

php xml dom xpath
1个回答
0
投票

XPath没关系,这只是删除了第一个[中的第一位,因为它不需要。

要输出XML,您需要将saveXML()与要导出所有XML标记的节点一起使用...

$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";

给...

<div> Third Element
 <div>
  <level3 name="jim">
  </level3>
 </div>
</div>
© www.soinside.com 2019 - 2024. All rights reserved.