给定XML
<SystemInfo>
<Info>
<Name>ABC</Name>
<ID>ZZ</ID>
<Number>2332</Number>
<Date>2020-10-10</Date>
<Version>1.0</Version>
</Info>
<Info>
<Name>XYZ</Name>
<ID>ZZ</ID>
<Number>1234</Number>
<Date>2020-10-10</Date>
<Ind>X</Ind>
</Info>
<Info>
<Name>PQR</Name>
<ID>ZZ</ID>
<Number>1234</Number>
<Date>2020-10-10</Date>
<Ack>Y</Ack>
</Info>
</SystemInfo> XSLT应该添加一个新元素作为'Info‘标记的最后一个元素,只有在Name = 'XYZ’时,预期的输出如下所示。
<SystemInfo>
<Info>
<Name>ABC</Name>
<ID>ZZ</ID>
<Number>2332</Number>
<Date>2020-10-10</Date>
<Version>1.0</Version>
</Info>
<Info>
<Name>XYZ</Name>
<ID>ZZ</ID>
<Number>1234</Number>
<Date>2020-10-10</Date>
<Ind>X</Ind>
**<Type>P</Type>**
</Info>
<Info>
<Name>PQR</Name>
<ID>ZZ</ID>
<Number>1234</Number>
<Date>2020-10-10</Date>
<Ack>Y</Ack>
</Info>
</SystemInfo> 我尝试了以下两种方法。
第一次实施。
<xsl:template match="/|@*|node()">
<xsl:copy>
<xsl:apply-template select = "@*/node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="ns0:Info[./ns0:Name='XYZ']">
<xsl:apply-template select = "@*/node()" />
<xsl:element name="Type">P</xsl:element>
</xsl:template>第二次执行。
<xsl:template match="/|@*|node()">
<xsl:copy>
<xsl:apply-template select = "@*/node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="ns0:Info[./ns0:Name='XYZ']">
<xsl:copy-of select = "." />
<xsl:element name="Type">P</xsl:element>
</xsl:template>提前感谢您的帮助
发布于 2020-10-07 21:34:02
您只需对模板做一些小的更改:
<xsl:template match="Info[Name='XYZ']">
<xsl:copy>
<xsl:apply-templates select = "@* | node()" />
<xsl:element name="Type">P</xsl:element>
</xsl:copy>
</xsl:template>如果有必要,将命名空间ns0:添加到匹配规则中,如下所示:
<xsl:template match="ns0:Info[ns0:Name='XYZ']">
...注意你的身份模板是不正确的。正确之处如下:
<!-- Identity template -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template> 其产出是:
<?xml version="1.0"?>
<SystemInfo>
<Info>
<Name>ABC</Name>
<ID>ZZ</ID>
<Number>2332</Number>
<Date>2020-10-10</Date>
<Version>1.0</Version>
</Info>
<Info>
<Name>XYZ</Name>
<ID>ZZ</ID>
<Number>1234</Number>
<Date>2020-10-10</Date>
<Ind>X</Ind>
<Type>P</Type> <!-- Added by template -->
</Info>
<Info>
<Name>PQR</Name>
<ID>ZZ</ID>
<Number>1234</Number>
<Date>2020-10-10</Date>
<Ack>Y</Ack>
</Info>
</SystemInfo>https://stackoverflow.com/questions/64252522
复制相似问题