需要一些关于平面文件架构的XSLT转换的帮助。是否可以将Record
节点的直接子节点组合成一个包含Record
节点的子节点?子512
是必需的,最小和最大出现次数为1,并标记新Record
节点的开头。
输入:
<ns0:Root xmlns="">
<Header>
<node01>AA</node01>
<node02>123</node02>
</Header>
<Record>
<512>
<node01>BB</node01>
<node02>123</node02>
</512>
</Record>
<Record>
<513>
<node01>CC</node01>
<node02>123</node02>
</513>
</Record>
<Record>
<512>
<node01>DD</node01>
<node02>123</node02>
</512>
</Record>
<Record>
<515>
<node01>JJ</node01>
<node02>123</node02>
</515>
</Record>
<Record>
<512>
<node01>EE</node01>
<node02>123</node02>
</512>
</Record>
<Record>
<513>
<node01>FF</node01>
<node02>123</node02>
</513>
</Record>
<Record>
<514>
<node01>GG</node01>
<node02>123</node02>
</514>
<514>
<node01>HH</node01>
<node02>123</node02>
</514>
</Record>
<Footer>
<node01>II</node01>
<node02>123</node02>
</Footer>
</ns0:Root>
期望输出:
<ns0:Root xmlns="">
<Header>
<item01>AA</item01>
<item02>123</item02>
</Header>
<Record>
<512>
<item01>BB</item01>
<item02>123</item02>
</512>
<513>
<item01>CC</item01>
<item02>123</item02>
</513>
</Record>
<Record>
<512>
<item01>DD</item01>
<item02>123</item02>
</512>
<515>
<item01>JJ</item01>
<item02>123</item02>
</515>
</Record>
<Record>
<512>
<item01>EE</item01>
<item02>123</item02>
</512>
<513>
<item01>FF</item01>
<item02>123</item02>
</513>
<514>
<item01>GG</item01>
<item02>123</item02>
</514>
<514>
<item01>HH</item01>
<item02>123</item02>
</514>
</Record>
<Footer>
<item01>II</item01>
<item02>123</item02>
</Footer>
</ns0:Root>
谢谢你,亲切的问候 菲利普
P.S。:XSLT 2.0不可用。
答案 0 :(得分:2)
这不是合法的XML(元素名称不能以数字开头),但假设您将所有无效元素重命名为以“r”开头,则可以执行以下操作:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Record[r512]">
<xsl:copy>
<xsl:apply-templates select="." mode="iterate" />
</xsl:copy>
</xsl:template>
<xsl:template match="Record" />
<xsl:template match="Record" mode="iterate">
<xsl:apply-templates />
<xsl:apply-templates select="following-sibling::Record[1][not(r512)]"
mode="iterate"/>
</xsl:template>
</xsl:stylesheet>
在此输入上运行时:
<ns0:Root xmlns="" xmlns:ns0="nsss">
<Header>
<node01>AA</node01>
<node02>123</node02>
</Header>
<Record>
<r512>
<node01>BB</node01>
<node02>123</node02>
</r512>
</Record>
<Record>
<r513>
<node01>CC</node01>
<node02>123</node02>
</r513>
</Record>
<Record>
<r512>
<node01>DD</node01>
<node02>123</node02>
</r512>
</Record>
<Record>
<r515>
<node01>JJ</node01>
<node02>123</node02>
</r515>
</Record>
<Record>
<r512>
<node01>EE</node01>
<node02>123</node02>
</r512>
</Record>
<Record>
<r513>
<node01>FF</node01>
<node02>123</node02>
</r513>
</Record>
<Record>
<r514>
<node01>GG</node01>
<node02>123</node02>
</r514>
<r514>
<node01>HH</node01>
<node02>123</node02>
</r514>
</Record>
<Footer>
<node01>II</node01>
<node02>123</node02>
</Footer>
</ns0:Root>
制作:
<ns0:Root xmlns:ns0="nsss">
<Header>
<node01>AA</node01>
<node02>123</node02>
</Header>
<Record>
<r512>
<node01>BB</node01>
<node02>123</node02>
</r512>
<r513>
<node01>CC</node01>
<node02>123</node02>
</r513>
</Record>
<Record>
<r512>
<node01>DD</node01>
<node02>123</node02>
</r512>
<r515>
<node01>JJ</node01>
<node02>123</node02>
</r515>
</Record>
<Record>
<r512>
<node01>EE</node01>
<node02>123</node02>
</r512>
<r513>
<node01>FF</node01>
<node02>123</node02>
</r513>
<r514>
<node01>GG</node01>
<node02>123</node02>
</r514>
<r514>
<node01>HH</node01>
<node02>123</node02>
</r514>
</Record>
<Footer>
<node01>II</node01>
<node02>123</node02>
</Footer>
</ns0:Root>