2017-01-15 73 views
1

我不想重新發明輪子。我從始終具有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

加載它作爲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,計數爲0。

或者與System.Xml.Linq.XDocument同樣的事情:

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