如果输入的XML中不存在指定的父节点,我该如何使用XSLT让其包含在一个父节点中呢?
例如,如果我的输入是:
<Project>...</Project>
我希望你能帮我在前缀和后缀中包装它:
要翻译的内容:
<?xml version "1.0" encoding="utf-8">
<Site>
<Project>...</Project>
</Site>
如果 <Project> 不是输入的根节点,那么我希望输入内容不做修改。谢谢!
<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="/Project">
<Site>
<xsl:call-template name="identity"/>
</Site>
</xsl:template>
</xsl:stylesheet>
输入1:
<Project>...</Project>
输出 1:
<Site>
<Project>...</Project>
</Site>
输入2:
<Root>
<Project>...</Project>
</Root>
输出2:
<Root>
<Project>...</Project>
</Root>
注意:身份转换。模式匹配。
这个转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(self::site)]/Project">
<site>
<xsl:call-template name="identity"/>
</site>
</xsl:template>
</xsl:stylesheet>
仅在元素<Project>
不是<site>
元素的子元素时,对其进行包装。
应用于此XML文档时:
<t>
<Project>x</Project>
<site>
<Project>y</Project>
</site>
</t>
正确,期望的结果已生成:
<t>
<site>
<Project>x</Project>
</site>
<site>
<Project>y</Project>
</site>
</t>
<xsl:template match="/">
<xsl:choose> <!-- If Node Period exists add the text --> <xsl:when test="Period">
<xsl:text><Site></xsl:text>
<xsl:text>
</xsl:text>
<xsl:text><Site></xsl:text>
</xsl:when> </xsl:choose> <xsl:apply-templates select="Notification"/> </xsl:template>
<Site>
标签,并将其重新添加为新元素的子节点会相当容易。 - Flynn1179