php – 如何使用单个DOMXpath表达式选择DOMDocument的所有节点?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何使用单个DOMXpath表达式选择DOMDocument的所有节点?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3456字,纯文字阅读大概需要5分钟。
内容图文
![php – 如何使用单个DOMXpath表达式选择DOMDocument的所有节点?](/upload/InfoBanner/zyjiaocheng/815/6055f22d36c64ce2936ab078f933c8d4.jpg)
选择文档的所有节点的xpath表达式是什么?
给出这个例子XML:
<div class="header"/>
我包含三个节点:< div> (元素),类=(属性)和“标题”(文本).
$doc = new DOMDocument;
$doc->loadXml('<div class="header"/>');
$xpath = new DOMXPath($doc);
我尝试使用// node():
$xpath->query('//node()');
它只返回所有元素节点(我假设因为//).有没有办法在属性值中添加属性和文本节点等其他节点?
附加示例:
我可以使用DOMDocument API获取每个节点,例如获取属性值的文本节点:
$doc = new DOMDocument;
$doc->loadXml('<div class="header"/>');
$class = $doc->documentElement->getAttributeNode('class');
echo $class->childNodes->item(0)->nodeName;
这使:
#text
如何获取具有一个xpath表达式的所有节点的超集,尤其是包括该示例性类属性 – 节点子文本节点?
解决方法:
使用:
//node() | //@* | //namespace::*
这将选择任何节点(类型为文档节点/,元素节点,文本节点,处理指令节点和注释节点)以及任何属性节点和任何命名空间节点 – 即所有节点,因为没有其他类型的节点.
如何访问包含所选节点的获取的XmlNodeList取决于您使用的特定XPath引擎的API – 阅读并使用您的文档.
基于XSLT的示例:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:for-each select=
"//node() | //@* | //namespace::*">
Type: <xsl:text/>
<xsl:choose>
<xsl:when test="not(..)">
<xsl:text>document node </xsl:text>
</xsl:when>
<xsl:when test="self::*">
<xsl:text>element </xsl:text>
</xsl:when>
<xsl:when test="self::text()">
<xsl:text>text-node </xsl:text>
</xsl:when>
<xsl:when test="self::comment()">
<xsl:text>comment-node </xsl:text>
</xsl:when>
<xsl:when test="self::processing-instruction()">
<xsl:text>PI-node </xsl:text>
</xsl:when>
<xsl:when test="count(.|../@*) = count(../@*)">
<xsl:text>attribute-node </xsl:text>
</xsl:when>
<xsl:when test=
"count(.|../namespace::*) = count(../namespace::*)">
<xsl:text>namespace-node </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:text>Name: "</xsl:text>
<xsl:value-of select="name()"/>" <xsl:text/>
<xsl:text>Value: </xsl:text>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
当这个XSLT转换应用于任何XML文档时,它使用上面的XPath表达式选择所有节点(转换故意排除任何只有空格的文本节点)并输出(按文档顺序)类型,名称和字符串值选定的节点.
例如,在应用于此XML文档时:
<networkOfBridges xmlns:x="x">
<bridge id="1" otherside="A" />
<!-- A Comment -->
<bridge id="2" oneside="A"/>
<?PI Processing Instruction ?>
<bridge id="3" oneside="A" otherside="A" />
</networkOfBridges>
结果是:
Type: element Name: "networkOfBridges" Value:
Type: namespace-node Name: "xml" Value: http://www.w3.org/XML/1998/namespace
Type: namespace-node Name: "x" Value: x
Type: element Name: "bridge" Value:
Type: namespace-node Name: "xml" Value: http://www.w3.org/XML/1998/namespace
Type: namespace-node Name: "x" Value: x
Type: attribute-node Name: "id" Value: 1
Type: attribute-node Name: "otherside" Value: A
Type: comment-node Name: "" Value: A Comment
Type: element Name: "bridge" Value:
Type: namespace-node Name: "xml" Value: http://www.w3.org/XML/1998/namespace
Type: namespace-node Name: "x" Value: x
Type: attribute-node Name: "id" Value: 2
Type: attribute-node Name: "oneside" Value: A
Type: PI-node Name: "PI" Value: Processing Instruction
Type: element Name: "bridge" Value:
Type: namespace-node Name: "xml" Value: http://www.w3.org/XML/1998/namespace
Type: namespace-node Name: "x" Value: x
Type: attribute-node Name: "id" Value: 3
Type: attribute-node Name: "oneside" Value: A
Type: attribute-node Name: "otherside" Value: A
内容总结
以上是互联网集市为您收集整理的php – 如何使用单个DOMXpath表达式选择DOMDocument的所有节点?全部内容,希望文章能够帮你解决php – 如何使用单个DOMXpath表达式选择DOMDocument的所有节点?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。