【问题标题】:XPath - get namespace nodes for this node only (i.e. not ancestor nodes)XPath - 仅获取此节点的命名空间节点(即不是祖先节点)
【发布时间】:2023-03-14 18:00:01
【问题描述】:

在 XSLT 中,以下 XPath 检索 范围内 的所有命名空间的命名空间节点。这些包括为当前节点定义的命名空间,以及在当前节点的祖先中定义的命名空间。

<xsl:for-each select="namespace::*">
  ...
</xsl:for-each>

我只想检索为当前节点明确定义的命名空间节点,即不是从祖先范围继承的命名空间节点。

怎么做?

【问题讨论】:

  • 这样做的目的是什么?请包括一个输入和预期输出的小例子。还要说明是使用 XSLT 1.0 还是 2.0。

标签: xml xslt xpath namespaces


【解决方案1】:

一般来说,这是不可能的。您只能列出不匹配任何父命名空间节点的命名空间节点:

<xsl:for-each select="namespace::*">
    <xsl:if test="not(../../namespace::*[name() = name(current())] = .)">
        <!-- different -->
    </xsl:if>
</xsl:for-each>

但这不会列出使用与父节点相同的前缀和 URI 重新定义的命名空间节点。

【讨论】:

  • 满足我的需要!谢谢。
【解决方案2】:

“我只想检索为当前节点明确定义的命名空间节点”

命名空间声明不构成 XDM 数据模型的一部分:例如,如果存在重复的冗余命名空间声明,则无法通过 XPath 发现这一点,因为命名空间信息以规范化的形式呈现,而 XDM 只会告诉您哪些命名空间在元素的范围内,而不是在声明它们的位置。您可以获得的最接近的方法是找到在元素范围内而不是在其父元素范围内的命名空间,@nwellnhof 已向您展示了这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2011-11-10
    • 2018-08-08
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多