php - PHP XMLNode,DOMnode 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>
我想从一个特定的顶级 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";
我尝试了各种组合 - 包括谓词中的“存在”,我确信它是基本的 xslt,但不是 PHP(!)。
我已经用谷歌搜索了负载...但是没有出现超过直接级别的谓词,而且似乎 PHP 的 xpath 有自己的风格,所以一般的 XPath 东西并不总是有用的。
解决方案
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>
推荐阅读
- python - 根据索引值在python中加入2个csv文件
- python-2.7 - SSL 连接错误:SSL 证书验证失败 (2026) (SQLDriverConnect) pyodbc?
- scala - 如何使用@RunWith(classOf[JUnitRunner]) 升级到 JUnit5 进行 Scala 测试?
- python - ttest_ind 给出 TypeError: unsupported operand type(s) for /: 'str' and 'int'
- javascript - React Consumer Context 无法设置状态 - 前端大师介绍 React 课程 v4 重构
- maven - Swagger CodeGen 依赖问题
- sorting - 如何仅根据第一列对行进行排序?
- android - 如何在另一个活动中更新片段和背景
- bash - 我如何解释这个 bash/awk 语法?
- java - 如何用方法引用替换“!= null”语句?