如何使用 xslt 重新排列重复的 xml 节点
How to re-arrange repeated xml nodes using xslt
请建议以下问题的 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>
预计XML:
<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>
请帮忙。
感谢期待。
XSLT:
<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>
请建议以下问题的 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>
预计XML:
<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>
请帮忙。
感谢期待。
XSLT:
<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>