0

我在这里遇到了一种情况,我必须使用 xslt 解析和转换给定的 XML。我需要编写 xpaths 来做到这一点。

下面给出了示例 xml。其中 ServiceProviderGroupPackage 和 SecondNode 都有不同的命名空间。我需要获取IReference节点的命名空间来获取它的值。

<?xml version="1.0" encoding="utf-8" ?>
<ServiceProviderGroupPackage Version="1.2.0" xmlns="http://webconnectivity.co.uk/ServiceProviderGroupPackage"
                             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                             xmlns:wsa="http://www.w3.org/2005/08/addressing">
  <FirstNode Version="1.2.0" xmlns="http://www.MySite.org/Standards/MySiteMsgSvc/1"
                    xmlns:rlc="http://www.MySite.org/standards/SecondNode/1"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  </FirstNode>
  <SecondNode Version="2010-2" xmlns:ac="http://www.MySite.org/Standards/MySiteMsgSvc/1"
                      xmlns="http://www.MySite.org/standards/SecondNode/1"
                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                      xmlns:lloyds="http://www.lloyds.com/The-Market/Operating-at-Lloyds/Resources/Risk_codes">
    <Movement Sender="Sender" Receiver="Receiver">
      <Contract>
        <Type>direct</Type>
        <Nature>lm_proportional_or_nonproportional</Nature>
        <Reference>B0509311011UMR</Reference>
        <IReference>P00000062MM/13A</IReference>
      </Contract>
    </Movement>
  </SecondNode>
</ServiceProviderGroupPackage>
4

1 回答 1

2

如果没有被覆盖,每个元素都会继承父元素的命名空间,因此 IReference 元素与 SecondNode 元素具有相同的命名空间http://www.MySite.org/standards/SecondNode/1


要检索任意元素的命名空间,请使用该namespace-uri(...)函数。

在 XPath 2.0 中,您可以使用通配符操作符*代替命名空间前缀:

namespace-uri(//*:IReference)

或者也

//*:IReference/namespace-uri()

使用 XPath 1.0,您必须检查谓词中的名称:

namespace-uri(//*[local-name() = "IReference"])
于 2013-06-02T23:39:58.473 回答