如何使用XSLT在达到条件之前获取父级同级值
我对XSLT和我的xml相当陌生如何使用XSLT在达到条件之前获取父级同级值,xslt,xpath,Xslt,Xpath,我对XSLT和我的xml相当陌生 <q> <w> <p> <b>b1</b> </p> <p>p1</p> <p>p2</p> <p>p3</p> <p> <b>b2</b> </p> <p>
<q>
<w>
<p>
<b>b1</b>
</p>
<p>p1</p>
<p>p2</p>
<p>p3</p>
<p>
<b>b2</b>
</p>
<p>
<b>b3</b>
</p>
<p>p4</p>
<p>p5</p>
<p>
<b>b4</b>
</p>
<p>p6</p>
</w>
</q>
b1
p1
p2
p3
b2
b3
p4
p5
b4
p6
我需要我的输出看起来像这样
<position_1_b1>
<p>p1</p>
<p>p2</p>
<p>p3</p>
</position_1_b1>
<position_2_b3>
<p>p4</p>
<p>p5</p>
</position_2_b3>
<position_3_b4>
<p>p6</p>
</position_3_b4>
p1
p2
p3
p4
p5
p6
输出中没有与b2相关的标记,因为下一个“p”元素中有一个“B”元素
<p><b>b2</b></p>
<p><b>b3</b></p>
b2
b3
提前谢谢 您可以在XSLT2.0中使用分组
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output indent="yes"></xsl:output>
<xsl:template match="w">
<xsl:for-each-group select="*" group-starting-with="p[b][following-sibling::*[1][self::p][not(b)]]">
<xsl:element name="{concat('position_', position(), '_', normalize-space(.))}">
<xsl:apply-templates select="current-group() except self::p[b]"/>
</xsl:element>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="p[not(b)]">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="p[b]"/>
您能说一下您是否能够使用XSLT 2.0,还是仅限于XSLT 1.0?标题建议使用一种过程算法。语言是声明性的,而不是过程性的。是的,2.0是可以的!谢谢你快速转身!如果你能为xpath和xsl推荐最好的源代码,那就太好了,因为我对它一无所知。你可以在W3或W3学校学习,stackoverflow也总能在任何方面帮助你issue@vinaypeta例如,见,