在节点集中复制元素
Copying elements inside nodeset
我想从节点集中复制元素并在输出中构建它们,如图所示。
<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>
它与您在此处收到的答案相同:
如果您从 身份转换 模板 开始,那么您的默认行为是按原样复制所有内容 。然后你需要为任何需要修改的节点添加异常规则以任何方式。
例如:
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>
我想从节点集中复制元素并在输出中构建它们,如图所示。
<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>
它与您在此处收到的答案相同:
如果您从 身份转换 模板 开始,那么您的默认行为是按原样复制所有内容 。然后你需要为任何需要修改的节点添加异常规则以任何方式。
例如:
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>