如何将此字符串解析为可搜索的对象?

时间:2017-01-15 19:42:58

标签: c# xml linq

我不打算重新发明轮子。我从一个总是有XML头的服务中获取值。实际的XML层次结构是未知的。每次通话都可能不同。我希望能够读取实际数据(忽略标题)并使其能够使用C#中提供的某种查询语言(linq,XMLDoc,???)

因此,给定字符串 myXML 可能包含以下(或其他)XML文档,我将如何搜索 cycleEndTime

的存在
<?xml version="1.0" encoding="UTF-8"?>
<SubscriptionResponse>
  <SID>uuid:41</SID>
  <duration>0</duration>
</SubscriptionResponse>

或者我可能会得到这样的东西:

<?xml version="1.0"?>
<Event seqnum="162" sid="uuid:43">
  <control>_22</control>
  <action>1</action>
  <node></node>
  <eventInfo>
    <totalCostToday>0.000000</totalCostToday>
    <totalCostPeriod>0.000000</totalCostPeriod>
    <totalUsagePeriod>0.000000</totalUsagePeriod>
    <cycleEndTime>2017/01/15 14:30:30</cycleEndTime>
  </eventInfo>
</Event>

1 个答案:

答案 0 :(得分:1)

将其加载为XmlDocument并查找特定节点:

var xDoc = new XmlDocument();
xDoc.LoadXml(text);
var result = xDoc.GetElementsByTagName("cycleEndTime");
if (result.Count == 1)
{
    var time = result.Item(0).FirstChild.InnerText;
}

如果你的第二个xml你会找到一个,对于第一个xml,count将是0。

System.Xml.Linq.XDocument相同的事情:

var xDoc = XDocument.Parse(text);
var result = xDoc.Descendants("cycleEndTime").FirstOrDefault();
if (result != null)
{
    var time = result.Value;
}