删除 XSL 样式表标签中的 XSL 命名空间前缀

发布于 2024-10-24 09:26:37 字数 241 浏览 2 评论 0原文

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

例如,可以:

<xsl:if test=''>

键入为:

<if test=''>

编辑: 样式表中包含 HTML 和 XML 节点。

谢谢, 罗斯

Is possible to drop the xsl: to XSL tags in XSL Stylesheets?

For example, could:

<xsl:if test=''>

be typed as:

<if test=''>

Edit:
Stylesheet has HTML and XML nodes within it.

Thanks,
Ross

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦归所梦 2024-10-31 09:26:37

事实上,您可以通过将 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>

Indeed you can do this, by defining the XSLT ("http://www.w3.org/1999/XSL/Transform") namespace as the default namespace:

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

The downside is that you then must use another prefix for your "domain" namespaces:

 <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>
猫七 2024-10-31 09:26:37

当然可以,但结合 @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 前缀,除非您能找到不这样做的充分理由。

Sure you can, but combining @ysdx and @Jon's answers, beware that your XSLT processor needs to differentiate between XSLT elements and output elements. For example, the following stylesheet throws an error in 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>

Which means you need to qualify the names of output elements, like this:

<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>

This can be problematic. You should stick to the conventional xsl prefix, unless you can think of a good reason not to.

沉睡月亮 2024-10-31 09:26:37

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

Don't think so. They differentiate between the "language" and any nodes that are intended for output.

云仙小弟 2024-10-31 09:26:37

是的。

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

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

使用 xml 作为xsl 变量

带递归的 XSLT 多字符串替换

Yes.

But do note that this has nothing to do with XSLT itself but with XML Names. That's why there are differences between XML 1.0 and XML 1.1 usage.

As example, here you have some of my previus answers using this syntax:

using xml as xsl variable

XSLT multiple string replacement with recursion

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文