如何从返回的基于Soap的XML消息中获取Element值

时间:2013-11-02 07:47:54

标签: c# xml

我将获取基于Soap的重新调整的XML的元素值,如下所示。

XML文件:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <SendToDSSResponse xmlns="http://tempuri.org/">
      <SendToDSSResult>
        <RC>0</RC>
        <RCD></RCD>
        <PCKT>
          <IDNO>1212</IDNO>
          <IDTYPE>051</IDTYPE>
          <NOBOX>121216</NOBOX>
          <NAME>James</NAME>
       </PCKT>
      </SendToDSSResult>
    </SendToDSSResponse>
  </soap:Body>
</soap:Envelope>

现在我想获取IDNO,NoBox和Name的值。我试图使用下面的代码来获取值,但它会抛出异常。获取元素值的正确方法是什么?

C#代码:

var xDoc = XDocument.Parse(cleanXml); //OR XDocument.Load(filename)      
string Name = xDoc.Descendants("Name").First().Value;

2 个答案:

答案 0 :(得分:4)

我认为您应该添加XNamespace,然后您可以从节点下的节点或标签中读出特定值,在ConsoleApplication中尝试此演示:

XDocument doc = XDocument.Load("XMLFile1.xml");
var result = doc.Descendants(XNamespace.Get("http://tempuri.org/")+"NAME").First();
Console.WriteLine(result.Value);

答案 1 :(得分:0)

使用Root属性。

string name = xDoc.Root.Descendants("NAME").First().Value;