我试图获得" cust_name"和#34;代码"来自下面的Web API XML响应的节点。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cust_list xmlns="http://example.com">
<cust>
<cust_id>1234</cust_id>
<cust_name>abcd</cust_name>
<cust_type>
<code>2006</code>
</cust_type>
</cust>
</cust_list>
我将响应作为字符串写入XMLDocument并尝试从中读取。以下是我的代码
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://serviceURI");
request.Method = "GET";
request.ContentType = "Application/XML";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (var reader = new StreamReader(response.GetResponseStream()))
{
string responseValue = reader.ReadToEnd();
var doc = new XmlDocument();
doc.LoadXml(responseValue);
string node = doc.SelectSingleNode("/cust_list/cust/cust_name").InnerText;
string node2 = doc.SelectSingleNode("/cust_list/cust/cust_type/code").InnerText;
}
我尝试定位特定节点,但未将对象引用设置为对象的实例&#34;错误。我在这做错了什么?
答案 0 :(得分:2)
XElement xml = XElement.Parse(xmlString);
XNamespace ns = (string)xml.Attribute("xmlns");
var customers = xml.Elements(ns + "cust")
.Select(c => new
{
name = (string)c.Element(ns + "cust_name"),
code = (int)c.Element(ns + "cust_type")
.Element(ns + "code")
});
在此示例中,将从输入字符串中解析XElement
。
还使用属性Namespace
创建xmlns
。注意选择元素时如何使用它。
选择根元素中的所有cust元素并将其投影到新的匿名类型中,该类型当前声明了string
名称和int
代码(您可以根据需要对其进行扩展)。
例如,要获取第一个客户的名称,您可以执行以下操作:
string name = customers.First().name;