我想从节点集内部复制元素,并在输出中将它们组织起来,如图所示。
<Details>
<ContractType>
<ID>001</ID>
<Name>
<FirstName>Mano</FirstName>
<Initial>1</Initial>
</Name>
</ContractType>
</Details>
输出:
<PartyDetails>
<ID>001</ID>
<Name>
<FirstName>Mano</FirstName>
<Initial>1</Initial>
</Name>
</PartyDetails>
在我试过的XSLT的片段下面,它并没有按照我的需要实际复制元素。我需要做什么改变来剥离ContractType并重命名Details,如输出中所示。
<xsl:template match="ContractType">
<xsl:element name="PartyDetails">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
答案 0 :(得分:2)
与您在此处收到的答案相同:Renaming node in XML
如果您已开始使用身份转换模板,那么您的默认行为是按原样复制所有 。然后,您需要为需要以任何方式修改 的任何节点添加例外规则。
例如:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- rename Details -->
<xsl:template match="Details">
<PartyDetails>
<xsl:apply-templates select="@*|node()"/>
</PartyDetails>
</xsl:template>
<!-- remove ContractType wrapper-->
<xsl:template match="ContractType">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
应用于您的示例,结果为:
<?xml version="1.0" encoding="UTF-8"?>
<PartyDetails>
<ID>001</ID>
<Name>
<FirstName>Mano</FirstName>
<Initial>1</Initial>
</Name>
</PartyDetails>