来自 xml 文档的 select 命名空间的 xpath

xpath to select namespace from xml document

使用 xslt 1.0 (BizTalk 2016) 我正在寻找一种通用方法来 select 任何有效 xml 文档的命名空间

例如,我有以下 xml 文档:

<?xml version="1.0" encoding="utf-8"?>
<PortfolioActivation xmlns="http://www.random.com/bo/request/portfolioactivation">
    <Portfolio>
        <ExternalId>PRT-00000450</ExternalId>
        <InternalId>c8b0239c-1e98-e911-a8b1-00224800449b</InternalId>
        <Version>8627558</Version>
        <Type>001</Type>
    </Portfolio>
</PortfolioActivation>

鉴于 Root 元素值可以是任何东西,select 命名空间值的 xpath 是什么,即 http://www.random.com/bo/request/portfolioactivation

我曾希望“/*/@xmlns”会起作用,但它不起作用。

最外层元素的命名空间可以使用namespace-uri(/*)找到。

或者,最外层元素范围内的默认命名空间是 /*/namespace::*[name()='']

这不是一回事。考虑

<p:root xmlns="a.ns" xmlns:p="b.ns"/>

第一个表达式会给你"b.ns",第二个会给你"a.ns"。从你的问题中不清楚你想要哪个。

请注意,命名空间不是 XDM 数据模型中的属性,因此您永远不会使用属性轴访问它们。 @xmlns 因此永远不会工作。