Xslt 在XSL样式表标记中删除XSL命名空间前缀

Xslt 在XSL样式表标记中删除XSL命名空间前缀,xslt,xslt-1.0,Xslt,Xslt 1.0,可以在xsl样式表中将xsl:放到xsl标记中吗 例如,可以: <xsl:if test=''> 键入为: <if test=''> 编辑: 样式表中有HTML和XML节点 谢谢, 罗斯不这么认为。它们区分“语言”和任何用于输出的节点。不这样认为。它们区分“语言”和任何用于输出的节点。实际上,您可以通过定义XSLT(“http://www.w3.org/1999/XSL/Transform“”)命名空间作为默认命名空间: <stylesheet xml

可以在xsl样式表中将
xsl:
放到xsl标记中吗

例如,可以:

<xsl:if test=''>

键入为:

<if test=''>

编辑: 样式表中有HTML和XML节点

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

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

实际上,您可以通过定义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>

...

实际上,您可以通过定义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>

...

当然可以,但是结合@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
前缀,除非您能想出一个不使用的好理由。

当然可以,但是结合@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
前缀,除非您能想出一个很好的理由不这样做。

是的。 但请注意,这与XSLT本身无关,而是与XML名称有关。这就是为什么XML1.0和XML1.1的用法存在差异

例如,这里有一些使用以下语法的previus答案:

是的。 但请注意,这与XSLT本身无关,而是与XML名称有关。这就是为什么XML1.0和XML1.1的用法存在差异

例如,这里有一些使用以下语法的previus答案:


是:尝试了@ysdx解决方案,它在html属性上抛出了错误。@Ross-没错。您可以为输出元素指定HTML名称空间,但无论如何,最好使用
xsl
前缀,因为这是每个人都习惯看到的。ok。re:因为这是每个人都习惯看到的。刚刚进行了实验,我看到
test:b
也将与名称空间测试一起输出。很高兴知道。是的:尝试了@ysdx解决方案,它在html属性上抛出错误。@Ross-没错。您可以为输出元素指定HTML名称空间,但无论如何,最好使用
xsl
前缀,因为这是每个人都习惯看到的。ok。re:因为这是每个人都习惯看到的。刚刚进行了实验,我看到
test:b
也将与名称空间测试一起输出。很高兴知道。很好,但是这会在我的样式表上的HTML标记上抛出错误。很好,但是这会在我的样式表上的HTML标记上抛出错误。