XSLT以特定模式添加标记

时间:2017-06-03 05:51:59

标签: xslt-2.0

我在添加" P"时遇到问题。在下一个模式匹配之前标记。

我得到的来源是:

 Firebase authnewuser = new Firebase("https://xxxxx-xxxxx-xxxxx.firebaseio.com");

我想要的是

<root>
<Element>
    <P>Value1</P>
    <P>
        <Level1>
            <Level2 type="i">Name1</Level2>, Title1
        </Level1>, Text1 
        <Level1>
            <Level2 type="i">Name2</Level2>
        </Level1>, Text2.</P>
    <P>
        <Level1>
            <Level2 type="i">Name3</Level2>, Title2
        </Level1>, Text3.
    </P>
</Element>

以下模板未给出我想要的结果,请帮助

<root>
<Element>
    <P>Value1</P>
    <P>
        <Level1>
            <Level2 type="i">Name1</Level2>, Title1
        </Level1>, Text1 
    </P>
    <P>
        <Level1>
            <Level2 type="i">Name2</Level2>
        </Level1>, Text2.</P>
    <P>
        <Level1>
            <Level2 type="i">Name3</Level2>, Title2
        </Level1>, Text3.
    </P>
</Element>
</root>

1 个答案:

答案 0 :(得分:0)

我认为您需要在匹配for-each-group的模板上使用P,然后才能获得

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:strip-space elements="*"/>
    <xsl:output indent="yes"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="P">
        <xsl:for-each-group select="node()" group-starting-with="Level1[Level2]">
                <P>
                    <xsl:apply-templates select="current-group()"/>
                </P>
        </xsl:for-each-group>  
    </xsl:template>

</xsl:transform>

http://xsltransform.net/gVhD8QT给出结果

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <Element>
      <P>Value1</P>
      <P>
         <Level1>
            <Level2 type="i">Name1</Level2>, Title1
        </Level1>, Text1 
        </P>
      <P>
         <Level1>
            <Level2 type="i">Name2</Level2>
         </Level1>, Text2.</P>
      <P>
         <Level1>
            <Level2 type="i">Name3</Level2>, Title2
        </Level1>, Text3.
    </P>
   </Element>
</root>