我需要将一个节点及其子元素移动到同一级别的下一个节点。
DSPACCNAME 节点及其子元素应移动到 DSPACCINFO 节点。
下面是我输入的 XML
<ENVELOPE>
<DSPACCNAME>
<DSPDISPNAME>Account 1</DSPDISPNAME>
</DSPACCNAME>
<DSPACCINFO>
<DSPOPAMT>
<DSPOPAMTA>-100.14</DSPOPAMTA>
</DSPOPAMT>
<DSPDRAMT>
<DSPDRAMTA></DSPDRAMTA>
</DSPDRAMT>
<DSPCRAMT>
<DSPCRAMTA></DSPCRAMTA>
</DSPCRAMT>
<DSPCLAMT>
<DSPCLAMTA>-100.14</DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
<DSPACCNAME>
<DSPDISPNAME>Account 2</DSPDISPNAME>
</DSPACCNAME>
<DSPACCINFO>
<DSPOPAMT>
<DSPOPAMTA></DSPOPAMTA>
</DSPOPAMT>
<DSPDRAMT>
<DSPDRAMTA>-470.00</DSPDRAMTA>
</DSPDRAMT>
<DSPCRAMT>
<DSPCRAMTA>470.00</DSPCRAMTA>
</DSPCRAMT>
<DSPCLAMT>
<DSPCLAMTA></DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
<DSPACCNAME>
<DSPDISPNAME>Account 3</DSPDISPNAME>
</DSPACCNAME>
<DSPACCINFO>
<DSPOPAMT>
<DSPOPAMTA>-942.00</DSPOPAMTA>
</DSPOPAMT>
<DSPDRAMT>
<DSPDRAMTA>-445.05</DSPDRAMTA>
</DSPDRAMT>
<DSPCRAMT>
<DSPCRAMTA>446.00</DSPCRAMTA>
</DSPCRAMT>
<DSPCLAMT>
<DSPCLAMTA>941.00</DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
<DSPACCNAME>
<DSPDISPNAME>Account 4</DSPDISPNAME>
</DSPACCNAME>
<DSPACCINFO>
<DSPOPAMT>
<DSPOPAMTA></DSPOPAMTA>
</DSPOPAMT>
<DSPDRAMT>
<DSPDRAMTA>-830.99</DSPDRAMTA>
</DSPDRAMT>
<DSPCRAMT>
<DSPCRAMTA>830.99</DSPCRAMTA>
</DSPCRAMT>
<DSPCLAMT>
<DSPCLAMTA></DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
</ENVELOPE>
下面是我尝试过的XSL
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="DSPACCNAME">
<xsl:copy>
<xsl:apply-templates select="node()[not(self::DSPACCNAME)]|@*"/>
</xsl:copy>
<!--<xsl:apply-templates select="DSPACCNAME"/>-->
</xsl:template>
</xsl:stylesheet>
我没有通过上述 XSL 获得预期的输出
我的预期输出如下
<ENVELOPE>
<DSPACCINFO>
<DSPACCNAME>
<DSPDISPNAME>Account 1</DSPDISPNAME>
</DSPACCNAME>
<DSPOPAMT>
<DSPOPAMTA>-100.14</DSPOPAMTA>
</DSPOPAMT>
<DSPDRAMT>
<DSPDRAMTA></DSPDRAMTA>
</DSPDRAMT>
<DSPCRAMT>
<DSPCRAMTA></DSPCRAMTA>
</DSPCRAMT>
<DSPCLAMT>
<DSPCLAMTA>-100.14</DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
<DSPACCINFO>
<DSPACCNAME>
<DSPDISPNAME>Account 2</DSPDISPNAME>
</DSPACCNAME>
<DSPOPAMT>
<DSPOPAMTA></DSPOPAMTA>
</DSPOPAMT>
<DSPDRAMT>
<DSPDRAMTA>-470.00</DSPDRAMTA>
</DSPDRAMT>
<DSPCRAMT>
<DSPCRAMTA>470.00</DSPCRAMTA>
</DSPCRAMT>
<DSPCLAMT>
<DSPCLAMTA></DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
<DSPACCINFO>
<DSPACCNAME>
<DSPDISPNAME>Account 3</DSPDISPNAME>
</DSPACCNAME>
<DSPOPAMT>
<DSPOPAMTA>-942.00</DSPOPAMTA>
</DSPOPAMT>
<DSPDRAMT>
<DSPDRAMTA>-445.05</DSPDRAMTA>
</DSPDRAMT>
<DSPCRAMT>
<DSPCRAMTA>446.00</DSPCRAMTA>
</DSPCRAMT>
<DSPCLAMT>
<DSPCLAMTA>941.00</DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
<DSPACCINFO>
<DSPACCNAME>
<DSPDISPNAME>Account 4</DSPDISPNAME>
</DSPACCNAME>
<DSPOPAMT>
<DSPOPAMTA></DSPOPAMTA>
</DSPOPAMT>
<DSPDRAMT>
<DSPDRAMTA>-830.99</DSPDRAMTA>
</DSPDRAMT>
<DSPCRAMT>
<DSPCRAMTA>830.99</DSPCRAMTA>
</DSPCRAMT>
<DSPCLAMT>
<DSPCLAMTA></DSPCLAMTA>
</DSPCLAMT>
</DSPACCINFO>
</ENVELOPE>
尝试这样:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/ENVELOPE">
<xsl:copy>
<xsl:apply-templates select="DSPACCINFO"/>
</xsl:copy>
</xsl:template>
<xsl:template match="DSPACCINFO">
<xsl:copy>
<xsl:copy-of select="preceding-sibling::DSPACCNAME[1]"/>
<xsl:copy-of select="*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>