使用C#在XML文档中查找特定值的好方法是什么?

Mat*_*sky 6 c# xml xpath searching-xml

我正在调用Oracle公开的WebService,它接受ItemID的输入并返回相应的Item Number.我想获取已从响应中包含的XML返回的Item Number.

XML看起来像这样:

<env:Envelope
  xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:ns0="http://dev1/MyWebService1.wsdl">
 <env:Header>
  <wsse:Security
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
    xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
    env:mustUnderstand="1"/>
 </env:Header>
 <env:Body>
  <ns0:getItemNbrByItemIdResponseElement>
   <ns0:result>1010603</ns0:result>
  </ns0:getItemNbrByItemIdResponseElement>
 </env:Body>
</env:Envelope>
Run Code Online (Sandbox Code Playgroud)

我有兴趣只抓住<ns0:result>1010603</ns0:result>特别是1010603.

我没有做过很多使用C#解析XML的工作,到目前为止我正在使用一些不同的方法.建议的方法是什么?

我在VS2008上(所以XPath可用等)

Jon*_*eet 15

我个人使用LINQ to XML,因为我发现比XPath更容易处理,特别是涉及名称空间时.你会做类似的事情:

XNamespace ns0 = "http://dev1/MyWebService1.wsdl";

String result = doc.Descendants(ns0 + "result").First().Value;
Run Code Online (Sandbox Code Playgroud)

请注意,doc这里应该是一个XDocument,而不是一个XmlDocument.(我的猜测是,这就是为什么它没有出现在你面前.)


ann*_*ata 5

fwiw你可以用这样的xpath来欺骗命名空间问题: //*[local-name()='result']