xml - "Template rules match elements in no namespace"消息

标签 xml xslt namespaces

我意识到命名空间问题比比皆是,但我是从 Saxon 那里得到的:

Warning SXXP0005: The source document is in namespace http://docbook.org/ns/docbook, b ut all the template rules match elements in no namespace (Use --suppressXsltNamespaceChec k:on to
avoid this warning)

我的源文件的根元素是:

    <?xml version="1.0" encoding="UTF-8"?>
    <topic xmlns:xi="http://www.w3.org/2001/XInclude" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://docbook.org/ns/docbook" 
    xml:id="103829">
    <info>
        <title>My title</title>
    </info>
    <procedure>
...

我的 XSL 是:

<?xml version="1.0"?>
<xsl:stylesheet version="2.0" 
    xmlns:xi="http://www.w3.org/2001/XInclude"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://docbook.org/ns/docbook">

<!-- Dummy template, just trying to match anything -->      
    <xsl:template match="procedure">
        <orderedlist>
            SOME TEXT
            <xsl:copy-of select="*"/>
        </orderedlist>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

正如警告所述,模板不匹配。但我不知道为什么:我认为源文件和 XSL 文件中具有相同的默认 namespace 可以防止此类错误。

另外,我想我可以声明一个前缀并将其应用于所有元素。但是避免前缀不就是默认命名空间的全部意义吗?

最佳答案

您可以在 xsl:stylesheet 上使用(XSLT 2 及更高版本)xpath-default-namespace="http://docbook.org/ns/docbook"如果您希望模式和表达式(例如 procedure)匹配/选择该命名空间中的元素。否则,procedure 匹配/选择没有命名空间中该名称的元素。

样式表中的 xmlns="http://docbook.org/ns/docbook" 仅用于放置结果元素(例如示例中的 orderedlist ) 进入该命名空间。

关于xml - "Template rules match elements in no namespace"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791990/

相关文章:

python - 如何使用python将大量XML插入到另一个XML文件中?

xslt - 如何使用 JDOM2 转换带有 CDATA 的 XML 文档?

c++ - 是否有等同于 Python 的 "import bigname as b"的 C++?

c++ - 匿名 namespace 内部/外部的 Typedef?

Python:从子函数/嵌套函数更改函数中的变量?

xml - 使用Groovy附加到xml文件的属性值

javascript - 将 XML 解析为 UL

c# - .NET compact framework - 将文件放在哪里以便模拟器可以访问它们

xslt - 减去天数

xml - XSLT:文档分析:如何在文档中输出唯一路径?