2012-03-03 119 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(); 
相关问题