1

可能重复:
如何使用 selectsinglenode() 访问具有属性和命名空间的 xml 节点

我有一个 XML:

<Root xmlns:XXXlocal="XXXX" schemaVersion="2.7" variant="multiterm">
  <Customers>
    <Customer type="Covered">
      <DataItem name="OpCity" value="" />
      <DataItem name="OpAddress1" value="" />
      <DataItem name="OpAddress2" value="" />
      <DataItem name="OpState" value="MI" />
    <Customer>
  </Customers>
</Root>

我需要从上面的 XML 中获取值“MI”。请注意,XML 有许多不同的“客户类型”。

我该怎么做呢?我很难编写 xPath 查询来获取它。

4

2 回答 2

2

在 C# 中,您可以使用 LINQ/XDocument,并XPathSelectElement()使用 xpath 进行查询:

var document = XDocument.Load(fileName);
var namespaceManager = new XmlNamespaceManager(new NameTable());
namespaceManager.AddNamespace("l", "XXXX");
var val = document.XPathSelectElement("/l:Root/l:Customers/l:Customer[@type='Covered']/l:DataItem[@name='OpState']/@value", namespaceManager).Value;
于 2013-01-29T00:59:01.697 回答
1

假设命名空间XXXX被定义为 prefix x,这应该工作......

/x:Root/x:Customers/x:Customer[@type='Covered']/x:DataItem[@name='OpState']/@value
于 2013-01-29T00:56:32.457 回答