duanhuo3392 2018-09-05 12:11
浏览 59
已采纳

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

I have some 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>

I want to extract the xml (as a string, including the xml tags) from a specific top level div element based in its grandchilds name at level3.

So to get the top div above the level3 node with the name of jim I have been looking at things like:

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

I have tried various combinations - including 'exists' in the predicate which I am sure is basic xslt, but not in PHP(!).

I have googled loads... but predicates going down past the immediate level hasn't come up, and it seems PHP's xpath has its own flavour, so general XPath stuff isn't always useful.

  • 写回答

1条回答 默认 最新

  • duandunzhuo3234 2018-09-05 12:19
    关注

    The XPath was OK, this just removes the first bit inside the first [ as it's not needed.

    To output the XML, you need to use saveXML() with the node you want to export all of the XML tags as well...

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

    Gives...

    <div> Third Element
     <div>
      <level3 name="jim">
      </level3>
     </div>
    </div>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理