Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用XSLT在达到条件之前获取父级同级值_Xslt_Xpath - Fatal编程技术网

如何使用XSLT在达到条件之前获取父级同级值

如何使用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>

我对XSLT和我的xml相当陌生

<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例如,见,