如何使用XSLT在我的XML块周围封装节点? 例如,我有以下XML文件。
<?xml version="1.0" encoding="iso-8859-1"?>
<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" omit-xml-declaration="yes" />
<xsl:template match="/">
<Root>
<VOBaseCollection>
<xsl:apply-templates select="Root/Location" />
</VOBaseCollection>
</Root>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我的输入XML文件如下所示。
<Root>
<Location><Name>Pennsylvania</Name><Type>State</Type></Location>
</Root>
我希望输出看起来像这样。
<Root><Container>
<Location><Name>Pennsylvania</Name><Type>State</Type></Location>
</Container>
</Root>
我希望确保每次都应用一个名为<CONTAINER>
的节点,它会复制来自Root / Location的信息。我需要对XSLT文件进行哪些更改?
答案 0 :(得分:1)
我只是猜测,在猜测模式似乎你想要这个:
编辑:得到了Mads Hansen的另一个猜测......
将添加到您已有的身份模板中:
<xsl:template match="Location">
<CONTAINER><xsl:apply-templates/></CONTAINER>
</xsl:template>
答案 1 :(得分:1)
总结评论中的所有答案,这个:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Location">
<Container>
<xsl:call-template name="identity"/>
</Container>
</xsl:template>
</xsl:stylesheet>
结果:
<Root>
<Container>
<Location>
<Name>Pennsylvania</Name>
<Type>State</Type>
</Location>
</Container>
</Root>