2012-09-14 22 views
0

在下面的XML文件:XML中的WinForms解析得到明文

<SVCs> 
     <SVC> 
       <id>001</id> 
       <request>Send SMS SVC 001 Request</request> 
       <reposne>Send SMS SVC 001 Response</reposne> 
     </SVC> 
     <SVC> 
       <id>002</id> 
       <request>Send SMS SVC 002 Request</request> 
       <reposne>Send SMS SVC 002 Response</reposne> 
     </SVC> 
    </SVCs> 

我需要搜索ID說002,並獲得以純文本形式相同的請求和響應。我在winforms C#.net 4.0中工作。我如何實現這一目標? 我正在使用XMLDocument命名空間來解析文檔。

我對XML庫真的很陌生,我認爲這是一個基本問題。我真的搜索了很多,但無法找到如何通過搜索標籤來獲取內部文本。

回答

1

我會用linq2xml

XDocument xDoc = XDocument.Parse(xml); 
var svc = xDoc.XPathSelectElement("//SVC[id='002']"); 

var req = svc.Element("request").Value; 
var resp = svc.Element("reposne").Value; 

var svc = xDoc.Descendants("SVC") 
       .First(s => s.Element("id").Value == "002"); 

PS:我一直相同的錯字reposne

0

不知道如果我理解你的問題的權利,但你內心的文字是這樣的:

XmlReader subReader = _reader.ReadSubtree(); 
subReader.Read(); 
0

使用linq!

XElement xmldoc= XElement.Load(new StringReader(@"<SVCs> 
     <SVC> 
       <id>001</id> 
       <request>Send SMS SVC 001 Request</request> 
       <reposne>Send SMS SVC 001 Response</reposne> 
     </SVC> 
     <SVC> 
       <id>002</id> 
       <request>Send SMS SVC 002 Request</request> 
       <reposne>Send SMS SVC 002 Response</reposne> 
     </SVC> 
    </SVCs>")); 




     var result = xmldoc.Elements("SVC").Where(e=>e.HasElements).Elements("id").Single(x=>x.Value=="002"); 
0

在另一方面,你可以使用Linq2XML太

var SVCs = XElement.Load("demoFile.xml"); 

var result = from svc in SVCs.Elements() 
       where svc.Element("id").Value == "002" 
       select svc; 

foreach (var entry in result) 
{ 
    Console.WriteLine(entry); 
    Console.WriteLine(entry.Element("request").Value); 
}