我的XSLT是一些带有xmlns:x="http://something"
属性的标签...如何避免这个冗余属性?输出XML从不在x:tag
中使用,也不在x:attribute
中使用。
XML示例:
<root><p>Hello</p><p>world</p></root>
XSL示例:
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:output encoding="UTF-8" method="xml" version="1.0" indent="no"/>
<xsl:template match="root"><foo>
<xsl:for-each select="p">
<p><xsl:value-of select="." /></p>
</xsl:for-each></foo>
<xsl:for-each select="x">
<link xlink:href="{x}" />
</xsl:for-each></foo>
</xsl:template>
XML输出示例:
<foo>
<p xmlns:xlink="http://www.w3.org/1999/xlink">Hello</p>
<p xmlns:xlink="http://www.w3.org/1999/xlink">world</p>
</foo>
xmlns:xlink
是开销,不使用!
A typical case其中XSLT必须使用命名空间,但输出不是:
<xsl:value-of select="php:function('regFunction', . )" />
答案 0 :(得分:7)
正如Dimitre已经说过的,如果你没有在XSLT中的任何地方使用xlink
命名空间,你应该删除它的命名空间声明。但是,如果您的XSLT实际上在某个您未向我们展示过的地方使用它,则可以使用exclude-result-prefixes
属性来阻止它被输出:
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlink="http://www.w3.org/1999/xlink"
exclude-result-prefixes="xlink">
答案 1 :(得分:0)
只需从xsl:stylesheet
指令中删除此命名空间声明 - 它就不会被使用(因此也是必要的):
xmlns:xlink="http://www.w3.org/1999/xlink"
整个转型现在变为:
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="UTF-8" method="xml" version="1.0" indent="no"/>
<xsl:template match="root"><foo>
<xsl:for-each select="p">
<p class="a"><xsl:value-of select="." /></p>
</xsl:for-each></foo>
</xsl:template>
</xsl:transform>
并应用于提供的XML文档:
<root><p>Hello</p><p>world</p></root>
生成没有名称空间的结果:
<foo>
<p class="a">Hello</p>
<p class="a">world</p>
</foo>