在XSLT中,以下XPath检索在范围中的所有命名空间的命名空间节点。这些包括为当前节点定义的名称空间,以及在当前节点的祖先中定义的名称空间。
<xsl:for-each select="namespace::*">
...
</xsl:for-each>
我想只检索为当前节点明确定义的命名空间节点,即不是从祖先范围继承的节点。
如何?
答案 0 :(得分:1)
一般来说,这是不可能的。您只能列出与任何父命名空间节点都不匹配的命名空间节点:
<xsl:for-each select="namespace::*">
<xsl:if test="not(../../namespace::*[name() = name(current())] = .)">
<!-- different -->
</xsl:if>
</xsl:for-each>
但是这不会列出使用与父级相同的前缀和URI重新定义的命名空间节点。
答案 1 :(得分:1)
&#34;我只想检索为当前节点明确定义的命名空间节点&#34;
命名空间声明不构成XDM数据模型的一部分:例如,如果存在重复的冗余命名空间声明,则无法通过XPath发现此问题,因为命名空间信息以规范化方式呈现表单,其中XDM仅告诉您哪些名称空间是元素的范围,而不是它们被声明的位置。你可以得到的最接近的是找到一个元素的范围内的命名空间,而不是它的父节点,@ nwellnhof已经向你展示了它。