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>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面