Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析XML响应并返回对象集合_C#_.net_Xml_Xsd - Fatal编程技术网

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

C# 解析XML响应并返回对象集合,c#,.net,xml,xsd,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:

我已经找到了许多不同的例子来说明如何解析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>
我还尝试使用XSD工具,但这导致了一个找不到的错误

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

请尝试以下方法:

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
的属性:
Value1
Value2
它可以工作:

 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"),
                          };

试试soap.decents(ns+“//ParentNode”);“//”选择该类型的所有子节点您可能应该使用WCF(System.ServiceModel),而不是直接使用XmlDocument(在System.XML.Linq中)解析XML应该指出,这是在不支持服务引用的WinRT univeral应用程序中必须将(string)x.Elements(ns+“Value1”)更改为(string)x.Element(ns+“Value1”).Value,它现在可以工作了。谢谢!@lookitskris您对
元素的看法是正确的
应该是
元素
,我在发布答案后不久修复了该部分(不过不需要使用
.Value
 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"),
                          };