linq到xml,读取xml文件

时间:2014-01-05 16:08:35

标签: c# linq linq-to-xml

我正在努力将linq中的这个xml文件读取到xml。有人可以帮助我吗? 我需要阅读每个曲目信息。

<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:jwplayer="http://developer.longtailvideo.com/trac/wiki/FlashFormats">
<title>Some title here</title>
<creator>Some creater</creator>
<info>somesite.com</info>
    <trackList>
        <track>
            <title>Title 1</title>
            <creator>Creater 1</creator>
            <location>location 1</location>
        </track>
        <track>
            <title>Title 2</title>
            <creator>Creater 2</creator>
            <location>location 2</location>
        </track>
    </trackList>
</playlist>

这就是我想要做的。

XElement xelement1 = XElement.Load(@"pathtoxmlfile\my.xml");

IEnumerable<XElement> tracks= xelement1.Elements();
// Read the entire XML
foreach (var track in tracks.Descendants("track"))
{
    Console.WriteLine(track );
    Console.ReadLine();
}

我正在使用C#。

由于 成员Parminder

3 个答案:

答案 0 :(得分:1)

您忘记包含命名空间名称,请执行以下更改:

    XNamespace defNs = "http://xspf.org/ns/0/";

    foreach (var track in tracks.Descendants(defNs + "track"))

答案 1 :(得分:1)

XElement tracks = XElement.Load(@"pathtoxmlfile\my.xml");  
foreach (var track in tracks.Descendants("track"))
{
  Console.WriteLine((string)track.Element("title"));
  Console.WriteLine((string)track.Element("creator"));
  Console.WriteLine((string)track.Element("location"));
}

答案 2 :(得分:1)

  1. 为什么要将文档加载到XElement而不是XDocument

  2. 您必须在查询中使用XNamespace实例,因为您的文档使用默认命名空间xmlns="http://xspf.org/ns/0/"

    var ns = XNamespace.Get("http://xspf.org/ns/0/");
    
  3. 您可以使用LINQ查询来获取从XML文档中提取的数据的集合。然后你可以遍历那个集合并做你需要的任何事情。

    var tracks = (from t in xDoc.Root.Element(ns + "trackList").Elements(ns + "track")
                  select new
                  {
                      Title = (string)t.Element(ns + "title"),
                      Creator = (string)t.Element(ns + "creator"),
                      Location = (string)t.Element(ns + "location")
                  }).ToList();
    

    tracks将是List<T>,其中T是匿名类型,包含3个string属性:TitleCreator和{{1} }。