gpt4 book ai didi

XSLT:如何摆脱 XPath 中默认命名空间的前缀? (xmlns ="...")

转载 作者:行者123 更新时间:2023-12-03 15:50:01 26 4
gpt4 key购买 nike

我有一个模板:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="urn:jboss:domain:1.1"
xmlns:d="urn:jboss:domain:1.1"
>

...

<xsl:template match="//d:interfaces/d:interface[@name='management']/d:inet-address">
...
</xsl:template>

这有效。

<xsl:template match="//interfaces/interface[@name='management']/inet-address">
...
</xsl:template>

尽管我设置了默认命名空间,但为什么这不起作用?

最佳答案

<xsl:template match="//interfaces/interface[@name='management']/inet-address">
...
</xsl:template>

Why this doesn't work despite I have a default namespace set?

这是所有 XSLT 和/或 XPath 列表中最多的常见问题解答之一

XPath 将任何未加前缀的名称视为属于“无 namespace ”——不管可能定义并在范围内的默认 namespace 这一事实。

引用W3C XPath 1.0 specification :

"A QName in the node test is expanded into an expanded-name using the namespace declarations from the expression context. This is the same way expansion is done for element type names in start and end-tags except that the default namespace declared with xmlns is not used: if the QName does not have a prefix, then the namespace URI is null"

因此上面的模板规则是匹配“无 namespace ”中的元素,但 XML 文档的元素在 “urn:jboss:domain:1.1” namespace 中——因此不单个节点符合上述规则。

关于XSLT:如何摆脱 XPath 中默认命名空间的前缀? (xmlns ="..."),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9304592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com