我想使用XSLT转换XML。 这是我的示例XML。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<aaa>
<bbb>
<ccc>123</ccc>
<ggg>2010.2</ggg>
</bbb>
</aaa>
<ddd>
<eee>112</eee>
<fff>234</fff>
</ddd>
<ddd>
<eee>456</eee>
<fff>345</fff>
</ddd>
</root>
我试图使用xslt获得xml以下。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<aaa>
<bbb>
<ccc>123</ccc>
<ggg>2010.2</ggg>
<ddd>
<eee>112</eee>
<fff>234</fff>
</ddd>
<ddd>
<eee>456</eee>
<fff>345</fff>
</ddd>
</bbb>
</aaa>
</root>
我尝试使用下面的XSLT来获得xml。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="aaa[following-sibling::ddd]">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<xsl:copy-of select="following-sibling::ddd" />
</xsl:copy>
</xsl:template>
<xsl:template match="ddd" />
</xsl:stylesheet>
但我的输出错误。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<aaa>
<bbb>
<ccc>123</ccc>
<ggg>2010.2</ggg>
</bbb>
<ddd>
<eee>112</eee>
<fff>234</fff>
</ddd>
<ddd>
<eee>456</eee>
<fff>345</fff>
</ddd>
</aaa>
</root>
有人可以帮助我。
答案 0 :(得分:0)
这应该可以解决问题:
DefaultVehicle
答案 1 :(得分:0)
使用下面的XSLT,可以获得所需的xml。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="aaa[following-sibling::ddd]/bbb">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<xsl:copy-of select="parent::aaa/following-sibling::ddd" />
</xsl:copy>
</xsl:template>
<xsl:template match="ddd" />
</xsl:stylesheet>
答案 2 :(得分:0)
所需的更改非常小:
bbb
匹配(不是aaa
)。foollowing-sibling
谓词应附加../
。copy-of
。下面是一个完整的脚本:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="bbb[../following-sibling::ddd]">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<xsl:copy-of select="../following-sibling::ddd" />
</xsl:copy>
</xsl:template>
<xsl:template match="ddd" />
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
</xsl:stylesheet>