我找到了许多不同的如何解析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的错误。
感谢您的帮助,我确信这是一个非常容易解决的问题
答案 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
类型的属性:Value1
和Value2
。
答案 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"),
};