XPath 中源文件引用中的 XSLT 命名空间

发布于 2025-01-13 12:23:35 字数 2010 浏览 1 评论 0原文

我花了几个小时来解决我的问题,直到我意识到只要 XML 中定义了命名空间,XSL 文件中的 XPath 就与我的源文档不匹配:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<clonkDoc xmlns="https://clonkspot.org"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="https://clonkspot.org ../../../clonk.xsd">
    <func>
        <some-more-elements/>
    </func>
    <author>Author</author><date>lazy date</date>
</clonkDoc>

xmlns="https://clokspot.org"据我所知,需要 才能使用 XSD 引用该文档。

我的 XSL 文件如下所示(此处未显示“head”和“nav”):

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:clonk="https://clonkspot.org">

    <xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN"
                doctype-system="http://www.w3.org/TR/html4/strict.dtd"/>
    <xsl:template match="/clonk:clonkDoc/clonk:func">
        <html>
            <xsl:call-template name="head"/>
            <body>
                <xsl:call-template name="nav"/>
                <h1>
                </h1>
        </body>
    </html>
</xsl:template>

结果如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

    <html xmlns:clonk="https://clonkspot.org">
    <head>...
    </head>
    <body>
        <h1></h1>
    </body>
</html>
    Authorlazy date

我有两个问题:

  1. 我在目标 html 文档中没有“clonk:”元素,但在 -元素定义了命名空间。
  2. 我想将所有 XPath 中的“clone:”保存在 XSL 中。

如何告诉 XSLT 处理器将

非常感谢!

i have spent hours with my problem until i realized that the XPath in the XSL file does not match my source document as long as there is a namespace defined in the XML:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<clonkDoc xmlns="https://clonkspot.org"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="https://clonkspot.org ../../../clonk.xsd">
    <func>
        <some-more-elements/>
    </func>
    <author>Author</author><date>lazy date</date>
</clonkDoc>

The xmlns="https://clonkspot.org" is needed as far as I know that the document can be referenced with an XSD.

My XSL file looks as following ("head" and "nav" not shown here):

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:clonk="https://clonkspot.org">

    <xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN"
                doctype-system="http://www.w3.org/TR/html4/strict.dtd"/>
    <xsl:template match="/clonk:clonkDoc/clonk:func">
        <html>
            <xsl:call-template name="head"/>
            <body>
                <xsl:call-template name="nav"/>
                <h1>
                </h1>
        </body>
    </html>
</xsl:template>

The result looks like:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

    <html xmlns:clonk="https://clonkspot.org">
    <head>...
    </head>
    <body>
        <h1></h1>
    </body>
</html>
    Authorlazy date

I've two problems with it:

  1. I have no "clonk:" elements in the target html document but in the <html>-element the namespace is defined.
  2. I would like to save the "clonk:" in all XPath in the XSL.

How do I tell the XSLT processor to interpret <template match="/clonkDoc/func"> to the default namespace of the source XML document (where xmlns="https://clonkspot.org")?

Thank you very much!

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

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

发布评论

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

评论(1

不再见 2025-01-20 12:23:35

要从输出中排除 xmlns:clonk="https://clonkspot.org" 声明,请将其添加到 xsl:stylesheet 开始标记中。

exclude-result-prefixes="clonk"

我不明白你的第二个问题。如果您询问如何定义一个默认名称空间,该名称空间将用于样式表中任何 XPath 表达式中包含的任何无前缀元素名称,那么答案是您需要 XSLT 2.0:
https://www.w3.org/TR/xslt20/#unprefixed-qnames< /a>

To exclude the xmlns:clonk="https://clonkspot.org" declaration from the output, add this to the xsl:stylesheet start-tag.

exclude-result-prefixes="clonk"

I did not understand your 2nd question. If you are asking how to define a default namespace that will be used for any unprefixed element name included in any XPath expression in the stylesheet, then the answer is that you need XSLT 2.0 for that:
https://www.w3.org/TR/xslt20/#unprefixed-qnames

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