解析XML响应并返回对象集合

时间:2014-10-17 11:27:36

标签: c# .net xml xsd

我找到了许多不同的如何解析XML文件的例子,大多数让我参与其中,但我找不到一个能满足我需要的例子。

给出以下XML响应

<?xml version="1.0" encoding="utf-8"?>
<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>
    <ParentNode xmlns="http://my.own.namespace.com/">
      <ChildNode>
        <Value1>string<Value1>
        <Value2>string<Value2>
      </ChildNode>
       <ChildNode>
        <Value1>string<Value1>
        <Value2>string<Value2>
      </ChildNode>
    </ParentNode>
  </soap:Body>
</soap:Envelope>

如何返回使用Value1和Value2中的值填充的ChildNode对象集合?

到目前为止,最远的是得到所有Value1字符串的列表,如此

var soap = XDocument.Parse(response);
XNamespace ns = XNamespace.Get("http://my.own.namespace.com/");

var objectList = soap.Decendents(ns + "ParentNode");
    .Select(x => x.Elements().First.Value).ToList();

我还尝试使用XSD工具,但这会导致无法找到http://my.own.namespace.com/:ParentNode的错误。

感谢您的帮助,我确信这是一个非常容易解决的问题

2 个答案:

答案 0 :(得分:0)

尝试这种方式:

XNamespace ns = XNamespace.Get("http://my.own.namespace.com/");

var objectList = soap.Decendents(ns + "ParentNode");
                     .Select(x => new ChildNode
                                  {
                                    Value1 = (string)x.Element(ns+"Value1"),
                                    Value2 = (string)x.Element(ns+"Value2"),
                                  }
                              )
                      .ToList();

我假设您定义了ChildNode个类,其中包含两个string类型的属性:Value1Value2

答案 1 :(得分:0)

有效:

 XNamespace ns1 = XNamespace.Get("http://my.own.namespace.com/");

 var values = from childnode in xx.Descendants(ns1 + "ParentNode").Elements(ns1 + "ChildNode")
                          select new
                          {
                              Value1 = (string)childnode.Element(ns1 + "Value1"),
                              Value2 = (string)childnode.Element(ns1 + "Value2"),
                          };