2012-11-08 51 views
2

我有一個XML:如何讀取特定名稱的所有XML節點並將它們放入數組(或列表)中?

<?xml version="1.0" encoding="UTF-8"?> 
<ticket> 
    <comments type="array"> 
     <comment> 
       <attachments type="array"> 
        <attachment> 
          <url>I NEED WHATEVER IS IN HERE</url> 
        </attachment> 
       </attachments> 
     </comment> 
     <comment> 
       <attachments type="array"> 
        <attachment> 
          <url>I NEED WHATEVER IS IN HERE</url> 
        </attachment> 
       </attachments> 
     <comment> 
    </comments> 
</ticket> 

我將如何去獲得什麼是URL標記內,並把它添加到<List>?我正在使用C#。

+0

你接受Xml的格式是什麼?文件,XDocument,XmlDocument等? –

+0

var doc = new XmlDocument(); doc.LoadXml(client.DownloadString(url)); –

回答

3

用途:

var result = XDocument.Parse(inputXml) 
    .DescendantNodes().OfType<XText>().Select(e => e.Value).ToList(); 

或者使用XPath:

var result = ((IEnumerable)XDocument.Parse(input).XPathEvaluate("//text()")) 
    .Cast<XText>().ToList(); 

要僅從檢索的文本url使用元素:

var result = XDocument.Parse(inputXml) 
     .Descendants("url").Select(e => e.Value).ToList(); 

或更改上面的XPath://url/text()

+0

我想更好的方法是隻選擇** url **節點的內部文本,以防其他類型的文本節點插入到該XML中。 –

+0

@ ThomasC.G.deVilhena,這取決於任務。 OP的問題並不清楚。無論如何,很容易修改提供的查詢。 –

+2

var result = XDocument.Parse(inputXml) .Descendants(「url」)。Select(e => e.Value).ToList();正是我所期待的。我<3你。 :d –

2
using (StringReader sr = new StringReader(xml_content)) 
{ 
    XDocument xdoc = XDocument.Load(sr); 

    IList<string> values = xdoc.XPathSelectElements("ticket/comments/attachments/url").Select(e => e.Value).ToList(); 
} 

或者,根據您的使用情況,您的評論:

var doc = new XmlDocument(); 
doc.LoadXml(xml_content); 
IList<string> values = doc.SelectNodes("ticket/comments/attachments/url") 
    .Cast<XmlElement>().Select(e => e.InnerText).ToList(); 
0

或者您可以使用VAR值= xdoc.SelectSingleNode( 「票/評論/附件/ URL」)InnerXml;

相關問題