我意识到命名空间问题只有十几个,但我来自Saxon:
警告SXXP0005:源文档位于命名空间中 http://docbook.org/ns/docbook,所有模板规则都匹配 没有命名空间中的元素(使用--suppressXsltNamespaceChec k:on到
避免这个警告)
我的源文件的根元素是:
<?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文件中使用相同的默认命名空间可以防止出现这种错误。
另外,我想我可以声明一个前缀并将其应用于所有元素。但是没有避免使用前缀作为默认命名空间的整个点吗?
答案 0 :(得分:1)
如果您希望类似xpath-default-namespace="http://docbook.org/ns/docbook"
的模式和表达式匹配/选择该命名空间中的元素,则可以在xsl:stylesheet
上使用({XSLT 2及更高版本)procedure
。否则procedure
匹配/选择无名称空间中该名称的元素。
样式表中的xmlns="http://docbook.org/ns/docbook"
仅用于将结果元素(如示例中的orderedlist
)放入该命名空间。