我使用xmlDocument方法完成了以下多次,但我想使用更强大的linq到xml方法.但是,我似乎碰壁了.我从twillio/crmText的restful API中获取数据.以下是他们的网站所在网站的链接:http: //crmtext.com/api/docs
这是我的XML字符串:
<response op="getcustomerinfo" status="200" message="ok" version="1.0">
<customer>
<totalMsg>3</totalMsg>
<custId>9008281</custId>
<custName></custName>
<timestamp>2015-04-30 16:17:19</timestamp>
<optinStatus>3</optinStatus>
<custMobile>6185551212</custMobile>
<subacct>1st Choice Courier</subacct>
</customer>
</response>
Run Code Online (Sandbox Code Playgroud)
我需要找出optinStatus.它应该返回3.我使用下面的,返回上面的xml
XDocument xdoc = XDocument.Parse(result1);
Run Code Online (Sandbox Code Playgroud)
我尝试了大约4000种不同的东西,包括:
IEnumerable<XElement> otinStatus = from el in xdoc.Elements("customer") select el;
IEnumerable<XElement> otinStatus2 = from el in xdoc.Elements("cusotmer.optinStatus") select el;
IEnumerable<XElement> otinStatus3 = from el in xdoc.Elements("optinStatus") select el;
Run Code Online (Sandbox Code Playgroud)
所有这些都不会返回任何结果.
请帮助,我知道这是我想念的简单事.提前谢谢你 - 乔
var status = xDoc
.Descendants("optinStatus") // get the optinStatus element
.Single() // we're expecting a single result
.Value; // get the XElement's value
Run Code Online (Sandbox Code Playgroud)
这是一个适合你的小提琴.你可以看到它在这里运行.输出是3.
using System;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
public class Program
{
public static void Main()
{
var xDoc = XDocument.Parse(xmlString);
var status = xDoc.Descendants("optinStatus").Single();
Console.WriteLine(status.Value);
}
private static string xmlString = @"
<response op=""getcustomerinfo"" status=""200"" message=""ok"" version=""1.0"">
<customer>
<totalMsg>3</totalMsg>
<custId>9008281</custId>
<custName></custName>
<timestamp>2015-04-30 16:17:19</timestamp>
<optinStatus>3</optinStatus>
<custMobile>6185312349</custMobile>
<subacct>1st Choice Courier</subacct>
</customer>
</response>
";
}
Run Code Online (Sandbox Code Playgroud)
Descendents()是一个实例轴方法(或简称轴).它返回IEnumerable<XElement>所有匹配后代中的一个.关于结果,我们打电话Single().它是一个Linq方法,它返回序列的唯一元素.如果有多个元素,则会引发错误.我们留下了一个单一的XElement.这表示整个XML元素.因为我们只希望它的值不是整个元素,所以我们称之为Value属性.宾果,我们完成了.
轴有两种:
XElement,XDocument以及XNode类.除了一个例外,axis方法返回一个类型的集合IEnumerable<T>.例外是Element(),它返回第一个匹配的子对象.这就是AmatuerDev所使用的东西,就像你的问题一样,如果你只期望一个结果,它就是一个好的,如果不是更好的方法Descendants().
一旦我们有了XElement,我们就可以检索它的一个属性而不是它的值.我们通过调用Attributes()方法来做到这一点.它返回匹配XAttribute.由于我们只需要属性值,因此我们称之为Value属性.瞧.
// for attribute
var response = xDoc.Descendants("response").Single();
var attr = response.Attribute("status");
Run Code Online (Sandbox Code Playgroud)
使用Linq to XML是一个两步过程.
IEnumerable<T>结果.以下是一些相关的MSDN文档:
| 归档时间: |
|
| 查看次数: |
5083 次 |
| 最近记录: |