删除XSL样式表标记中的XSL名称空间前缀

时间:2011-03-18 00:14:14

标签: xslt xslt-1.0

是否可以在XSL样式表中删除xsl:到XSL标记?

例如,可以:

<xsl:if test=''>

输入:

<if test=''>

修改 样式表中包含HTML和XML节点。

谢谢, 罗斯

4 个答案:

答案 0 :(得分:4)

确实可以通过将XSLT(“http://www.w3.org/1999/XSL/Transform”)命名空间定义为默认命名空间来实现此目的:

 <stylesheet xmlns="http://www.w3.org/1999/XSL/Transform">
    ...
 </stylesheet>

缺点是您必须为“域”命名空间使用另一个前缀:

 <stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:foo="http://whatever" xmlns:html="http://www.w3.org/1999/xhtml">
    <template match="foo:bar">
       <html:form>
           ...
       </html:form>
    </template>
 </stylesheet>

答案 1 :(得分:4)

当然可以,但结合@ysdx和@Jon的答案,请注意您的XSLT处理器需要区分XSLT元素和输出元素。例如,以下样式表在Firefox中引发错误:

<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
    <template match="/">
        <!-- <b> is not a valid XSLT element -->
        <b><value-of select="'test'"/></b>
    </template>
</stylesheet>

这意味着您需要限定输出元素的名称,如下所示:

<stylesheet version="1.0" 
         xmlns="http://www.w3.org/1999/XSL/Transform"
         xmlns:test="http://whatever">
    <template match="/">
        <test:b><value-of select="'test'"/></test:b>
    </template>
</stylesheet>

这可能有问题。你应该坚持使用传统的xsl前缀,除非你能想出一个不合理的理由。

答案 2 :(得分:1)

不要这么认为。它们区分“语言”和任何用于输出的节点。

答案 3 :(得分:0)

但请注意,这与XSLT本身无关,而是与XML名称无关。这就是XML 1.0和XML 1.1使用之间存在差异的原因。

例如,在这里,您可以使用以下语法获得一些我的优势答案:

using xml as xsl variable

XSLT multiple string replacement with recursion