我在发布之前在谷歌搜索过但我找不到答案所以,我想在这里发布解决方案,以便对其他开发者有所帮助。
情境: 样本输入
<CarYard>
<Cars>
<A>honda</A>
<B>BMW</B>
<C>AUDI</C>
</Cars>
</CarYard>$
如何为元素A,B,C生成命名空间 当您进行动态模板匹配时。
答案 0 :(得分:0)
<xsl:template match="CarYard">
<xsl:apply-templates select="//CarYard/*[1]" mode="addNamespace"/>
</xsl:element>
</xsl:template>
<xsl:template match="node() | @*" mode="addNamespaceToAllChild">
<xsl:variable name="ELEM_NAME" select="concat('ns1:',local-name())"/>
<xsl:element name="{$ELEM_NAME}" xmlns:ns1="http://test.namespace/generic">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="node() | @*" mode="addNamespace">
<xsl:variable name="ELEM_NAME" select="concat('ns1:',local-name())"/>
<xsl:element name="{$ELEM_NAME}" xmlns:ns1="http://schemas.test.namespace/generic">
<xsl:apply-templates select="@* | node()" mode="addNamespaceToAllChild"/>
</xsl:element>
</xsl:template>
现在结果将是
<CarYard>
<ns1:Cars>
<ns1:A>honda</ns1:A>
<ns1:B>BMW</ns1:B>
<ns1:C>AUDI</ns1:C>
</ns1:Cars>
答案 1 :(得分:0)
输出命名空间元素的有效示例就是这样。
<xsl:element name="x:include" namespace="http://www.w3.org/2001/XInclude">
<xsl:apply-templates select="@href"/>
</xsl:element>
哪会产生类似的东西。
<x:include xmlns:x="http://www.w3.org/2001/XInclude" href="../topics/topic.dita">