Xml XPath-通过分析以下同级来选择节点
我有以下XML文档Xml XPath-通过分析以下同级来选择节点,xml,xslt,xpath,xslt-2.0,Xml,Xslt,Xpath,Xslt 2.0,我有以下XML文档 <doc> <h1>aa</h1> <p>bb</p> <p>cc</p> <h1>dd</h1> <p>ee</p> <h2>ff</h2> <h2>gg</h2> <h1>jj</h1> <
<doc>
<h1>aa</h1>
<p>bb</p>
<p>cc</p>
<h1>dd</h1>
<p>ee</p>
<h2>ff</h2>
<h2>gg</h2>
<h1>jj</h1>
<p>kk</p>
<p>ll</p>
<h1>hh</h1>
<h2>ii</h2>
<p>jj</p>
</doc>
aa
bb
抄送
dd
ee
ff
游戏打得好
林俊杰
kk
ll
嗯
二,
jj
我需要编写一个XPath查询来获取
节点,其中在出现另一个
节点之前存在以下同级
节点。在这种情况下,应选择第2个和第4个
节点。(
节点在另一个
节点之前存在于以下SIBLIG中)
我试着在几个小时内完成这项工作,但想不出任何合适的解决方案来获取这些节点
有人能提出一种方法来解决这个问题吗?选择这样的h1节点,其中h2是h1和h2节点中的第一个后续兄弟节点
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/doc">
<xsl:for-each select="h1[following-sibling::*[self::h1 or self::h2][1][self::h2]]">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
选择这样的h1节点,其中h2是h1和h2节点中的第一个后续兄弟节点
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/doc">
<xsl:for-each select="h1[following-sibling::*[self::h1 or self::h2][1][self::h2]]">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
选择这样的h1节点,其中h2是h1和h2节点中的第一个后续兄弟节点
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/doc">
<xsl:for-each select="h1[following-sibling::*[self::h1 or self::h2][1][self::h2]]">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
选择这样的h1节点,其中h2是h1和h2节点中的第一个后续兄弟节点
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/doc">
<xsl:for-each select="h1[following-sibling::*[self::h1 or self::h2][1][self::h2]]">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
只需找到h2并取前面的h1
//h2/preceding-sibling::h1[1]
结果
Element='<h1>dd</h1>'
Element='<h1>hh</h1>'
Element='dd'
元素='hh'
只需找到h2并取前面的h1
//h2/preceding-sibling::h1[1]
结果
Element='<h1>dd</h1>'
Element='<h1>hh</h1>'
Element='dd'
元素='hh'
只需找到h2并取前面的h1
//h2/preceding-sibling::h1[1]
结果
Element='<h1>dd</h1>'
Element='<h1>hh</h1>'
Element='dd'
元素='hh'
只需找到h2并取前面的h1
//h2/preceding-sibling::h1[1]
结果
Element='<h1>dd</h1>'
Element='<h1>hh</h1>'
Element='dd'
元素='hh'
2和4节点-来自何处?示例中的节点是什么?@splash58,很抱歉弄错了。我已经更新了问题2和问题4节点-来自什么?示例中的节点是什么?@splash58,很抱歉弄错了。我已经更新了问题2和问题4节点-来自什么?示例中的节点是什么?@splash58,很抱歉弄错了。我已经更新了问题2和问题4节点-来自什么?示例中的节点是什么?@splash58,很抱歉弄错了。我已经更新了问题XPath是声明性的,即在大多数情况下,您可以轻松地将初始查询直接转换为XPath,只需很少的努力。XPath是声明性的,即在大多数情况下,您可以轻松地将初始查询直接转换为XPath,只需很少的努力。XPath是声明性的,也就是说,在大多数情况下,您可以轻松地将初始查询直接转换为XPath,只需很少的努力。XPath是声明性的,也就是说,在大多数情况下,您可以轻松地将初始查询直接转换为XPath,只需很少的努力。