Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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重新排列重复的xml节点_Xml_Xslt_Xslt 2.0 - Fatal编程技术网

如何使用xslt重新排列重复的xml节点

如何使用xslt重新排列重复的xml节点,xml,xslt,xslt-2.0,Xml,Xslt,Xslt 2.0,请为下面的问题提供xslt代码。我提供了一个来自输入XML和预期XML的简单代码。如果有人能提供XSLT代码以将输入xml转换为预期的xml格式,我们将不胜感激 输入XML <INFOPERSONFILLNOTE> <VARIABLELABEL>Level</VARIABLELABEL> <SERIALNO1 STATUS="NONE"> 1 <VARIABLELABEL>S1</VARIA

请为下面的问题提供xslt代码。我提供了一个来自输入XML和预期XML的简单代码。如果有人能提供XSLT代码以将输入xml转换为预期的xml格式,我们将不胜感激

输入XML

    <INFOPERSONFILLNOTE>
    <VARIABLELABEL>Level</VARIABLELABEL>
    <SERIALNO1 STATUS="NONE">
    1
    <VARIABLELABEL>S1</VARIABLELABEL>
    <CHANGEDATE/>
    <CHANGEREASON/>
    </SERIALNO1>
    <SERIALNO1 STATUS="NONE">
    2
    <VARIABLELABEL>S2</VARIABLELABEL>
    <CHANGEDATE/>
    <CHANGEREASON/>
    </SERIALNO1>
    <CLASSPERSONFILLNOTE STATUS="NONE">
    c1
    <VARIABLELABEL>C1</VARIABLELABEL>
    <CHANGEDATE>20200226</CHANGEDATE>
    <CHANGEREASON>cr</CHANGEREASON>
    </CLASSPERSONFILLNOTE>
    <CLASSPERSONFILLNOTE STATUS="NONE">
    c2
    <VARIABLELABEL>C2</VARIABLELABEL>
    <CHANGEDATE>20200226</CHANGEDATE>
    <CHANGEREASON>cr</CHANGEREASON>
    </CLASSPERSONFILLNOTE>
   </<INFOPERSONFILLNOTE>

水平仪
1.
S1
2.
S2
c1
C1
20200226
铬
c2
C2
20200226
铬
XSLT:


结果:

<INFOPERSONFILLNOTE>
<VARIABLELABEL>Level</VARIABLELABEL>
<SERIALNO1 STATUS="NONE">
1
<VARIABLELABEL>S1</VARIABLELABEL>
<CHANGEDATE/>
<CHANGEREASON/>
</SERIALNO1><CLASSPERSONFILLNOTE STATUS="NONE">
c1
<VARIABLELABEL>C1</VARIABLELABEL>
<CHANGEDATE>20200226</CHANGEDATE>
<CHANGEREASON>cr</CHANGEREASON>
</CLASSPERSONFILLNOTE><SERIALNO1 STATUS="NONE">
2
<VARIABLELABEL>S2</VARIABLELABEL>
<CHANGEDATE/>
<CHANGEREASON/>
</SERIALNO1><CLASSPERSONFILLNOTE STATUS="NONE">
c2
<VARIABLELABEL>C2</VARIABLELABEL>
<CHANGEDATE>20200226</CHANGEDATE>
<CHANGEREASON>cr</CHANGEREASON>
</CLASSPERSONFILLNOTE>
</INFOPERSONFILLNOTE>

水平仪
1.
S1
c1
C1
20200226
铬
2.
S2
c2
C2
20200226
铬

感谢您的回复。我是XSLT新手,不知道如何将xml中多个转换的代码合并到一个XSLT中。如果您能帮助我实现以下转变,我将非常感谢您的努力。我正在用完整的输入和预期的xml编写一个不同的问题。再次感谢你的帮助。非常感谢你的支持。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

<xsl:template match="INFOPERSONFILLNOTE">
    <xsl:copy>
        <xsl:apply-templates select="@*"/>
        <xsl:apply-templates select="VARIABLELABEL"/>

        <xsl:for-each select="SERIALNO1|CLASSPERSONFILLNOTE">
            <xsl:sort select="number(translate(VARIABLELABEL, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', ''))" order="ascending"/>
            <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>
<INFOPERSONFILLNOTE>
<VARIABLELABEL>Level</VARIABLELABEL>
<SERIALNO1 STATUS="NONE">
1
<VARIABLELABEL>S1</VARIABLELABEL>
<CHANGEDATE/>
<CHANGEREASON/>
</SERIALNO1><CLASSPERSONFILLNOTE STATUS="NONE">
c1
<VARIABLELABEL>C1</VARIABLELABEL>
<CHANGEDATE>20200226</CHANGEDATE>
<CHANGEREASON>cr</CHANGEREASON>
</CLASSPERSONFILLNOTE><SERIALNO1 STATUS="NONE">
2
<VARIABLELABEL>S2</VARIABLELABEL>
<CHANGEDATE/>
<CHANGEREASON/>
</SERIALNO1><CLASSPERSONFILLNOTE STATUS="NONE">
c2
<VARIABLELABEL>C2</VARIABLELABEL>
<CHANGEDATE>20200226</CHANGEDATE>
<CHANGEREASON>cr</CHANGEREASON>
</CLASSPERSONFILLNOTE>
</INFOPERSONFILLNOTE>