解析 XML 排除元素
Parsing XML excluding elements
我正在尝试解析 xml 文件,这不是问题所在。但是我的 xml 文件有多个 <name>
标签。一个是歌曲,另一个是艺术家。我想排除艺术家姓名标签,但我不知道如何。
到目前为止,这是我的代码:
string xmlString;
using (WebClient wc = new WebClient())
{
xmlString = wc.DownloadString(@"http://ws.audioscrobbler.com/2.0/?method=album.getInfo&album=awake&artist=Dream%20Theater&api_key=b5cbf8dcef4c6acfc5698f8709841949");
}
List<XElement> alleElements = new List<XElement>();
XDocument myXMLDoc = XDocument.Parse(xmlString);
List<XElement> trackNames = myXMLDoc.Descendants("album")
.Elements("tracks")
.Elements("name")
.ToList();
foreach (XElement el in trackNames)
{
Console.WriteLine(el);
}
Console.WriteLine("-----End-----");
Console.ReadLine();
我尝试使用 .Elements("name");
而不是 Descendants,但是 returns 什么都没有。
这是我的 xml 文件的一小部分:
<track rank="1">
<name>6:00</name>
<url>http://www.last.fm/music/Dream+Theater/_/6:00</url>
<duration>331</duration>
<streamable fulltrack="0">0</streamable>
<artist>
<name>Dream Theater</name>
<mbid>28503ab7-8bf2-4666-a7bd-2644bfc7cb1d</mbid>
<url>http://www.last.fm/music/Dream+Theater</url>
</artist>
</track>
有没有办法排除 <artist>
标签内的 <name>
标签。
如果我不够清楚,请告诉我,我会详细解释!
听起来您只是想使用 Elements
而不是 Descendants
,但在正确的地方 - 不清楚您在哪里尝试使用它。我还建议使用 ToList
使事情变得更简单。给定 documentation 中的示例,看起来这会起作用,并且在我们期望有多个元素的位置方面更清楚:
List<XElement> trackNames = doc.Root
.Element("tracks")
.Elements("track")
.Elements("name")
.ToList();
您可以尝试排除条件,例如 myXMLDoc. ... .Descendants("name").Where(x => x.Parent.Name != "artist").
我正在尝试解析 xml 文件,这不是问题所在。但是我的 xml 文件有多个 <name>
标签。一个是歌曲,另一个是艺术家。我想排除艺术家姓名标签,但我不知道如何。
到目前为止,这是我的代码:
string xmlString;
using (WebClient wc = new WebClient())
{
xmlString = wc.DownloadString(@"http://ws.audioscrobbler.com/2.0/?method=album.getInfo&album=awake&artist=Dream%20Theater&api_key=b5cbf8dcef4c6acfc5698f8709841949");
}
List<XElement> alleElements = new List<XElement>();
XDocument myXMLDoc = XDocument.Parse(xmlString);
List<XElement> trackNames = myXMLDoc.Descendants("album")
.Elements("tracks")
.Elements("name")
.ToList();
foreach (XElement el in trackNames)
{
Console.WriteLine(el);
}
Console.WriteLine("-----End-----");
Console.ReadLine();
我尝试使用 .Elements("name");
而不是 Descendants,但是 returns 什么都没有。
这是我的 xml 文件的一小部分:
<track rank="1">
<name>6:00</name>
<url>http://www.last.fm/music/Dream+Theater/_/6:00</url>
<duration>331</duration>
<streamable fulltrack="0">0</streamable>
<artist>
<name>Dream Theater</name>
<mbid>28503ab7-8bf2-4666-a7bd-2644bfc7cb1d</mbid>
<url>http://www.last.fm/music/Dream+Theater</url>
</artist>
</track>
有没有办法排除 <artist>
标签内的 <name>
标签。
如果我不够清楚,请告诉我,我会详细解释!
听起来您只是想使用 Elements
而不是 Descendants
,但在正确的地方 - 不清楚您在哪里尝试使用它。我还建议使用 ToList
使事情变得更简单。给定 documentation 中的示例,看起来这会起作用,并且在我们期望有多个元素的位置方面更清楚:
List<XElement> trackNames = doc.Root
.Element("tracks")
.Elements("track")
.Elements("name")
.ToList();
您可以尝试排除条件,例如 myXMLDoc. ... .Descendants("name").Where(x => x.Parent.Name != "artist").