2012-03-03 90 views
1

你好,我有這個鏈接XML。我需要採取所有項目並打印出項目guid值(網址發佈)。我在這段代碼中做錯了什麼?它打印出空行而不是內容。我在這裏做錯了什麼 - 打印出XML guid值

static void Main(string[] args) 
{ 

    XmlTextReader reader = new XmlTextReader("http://lazhalazha.livejournal.com/data/rss"); 

    while (reader.Read()) 
    { 
     if (reader.NodeType == XmlNodeType.Element) 
     { 
      if (reader.Name == "guid") 
      { 
       Console.WriteLine(reader.Value); // Prints out empty strings instead of URL 
      } 
     } 
    } 

    Console.WriteLine("end."); 
    Console.ReadLine(); 
} 

此外,在打印2行,當我們看到,我有3項與GUID在其中,這是爲什麼?

回答

2

你的代碼訪問節點元素(​​),而你想要的值是文本元素。您需要提前讀者獲得內部文本,喜歡這裏:

if (reader.Name == "guid") 
{ 
    Console.WriteLine(reader.Value); 
    // advance reader to current node's (guid) text value 
    reader.Read(); 
    Console.WriteLine(reader.Value); 
} 

此外,任何理由不嘗試的LINQ to XML在這裏?它很容易和簡單的情況是這樣,我認爲這樣更易讀:

var document = XDocument.Load("http://lazhalazha.livejournal.com/data/rss"); 
var links = document.Descendants("guid").Select(n => n.Value); 
foreach (var link in links) 
{ 
    Console.WriteLine(link); 
} 
+0

Okey,它工作得很好,但你能幫我解決第二個問題嗎?爲什麼它只打印出2個帖子的網址,當我明顯有3 – sed 2012-03-03 16:57:51

+1

@Qmal:我在鏈接的XML中只看到** 2 **''節點。 – 2012-03-03 16:58:36

+0

啊,第三個是私人的,只提供給我。謝啦。 – sed 2012-03-03 17:06:08

0

您的代碼工作正常,如果您打印:

Console.WriteLine(reader.ReadElementContentAsString()); 

嘗試使用LINQ to XML來獲取GUID元素值:

XDocument loaded = XDocument.Load(@"http://lazhalazha.livejournal.com/data/rss"); 
var query = (from c in loaded.Descendants("guid") 
        select c.Value).ToList(); 
相關問題