【问题标题】:Getting value from Element with XML使用 XML 从 Element 获取价值
【发布时间】:2020-01-12 15:09:10
【问题描述】:

我可以从 XML 中获取标题属性,但想提取标题,这是几个节点下来的。我已经在代码中留下了我的最新尝试。 FirstAttributes 工作,所以我知道我正在连接,如果我返回 Console.WriteLine(e),我会得到完整的 XML。

var url = "http://musicbrainz.org/ws/2/release-group/?query=artist:%22coldplay%22%20AND%20primarytype:%22single%22";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = "Hello World Super Script";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
XDocument doc = XDocument.Load(response.GetResponseStream());

IEnumerable<XElement> childList =
from el in doc.Elements()  
select el; 
//title is element we need  
foreach (XElement e in childList)  
Console.WriteLine("{0} {1} {2}", e.FirstAttribute, e.FirstAttribute.NextAttribute, e.Element("release-group").Attribute("title")); 

已研究:C# extracting data from XML

【问题讨论】:

  • 能否请您添加一个 Xml 元素示例和预期输出?

标签: c# xml linq-to-xml


【解决方案1】:

您可以执行以下操作。

var doc = XDocument.Load(response.GetResponseStream());
XNamespace ns = "http://musicbrainz.org/ns/mmd-2.0#";

var titleList = doc.Descendants(ns + "title");
foreach (var element in titleList) 
    Console.WriteLine(element.Value);

XDocument.Descendants() 允许您搜索具有指定名称的子节点。请注意,您需要指定命名空间以及元素名称。

如果观察 WebRequest 的响应,可以找到命名空间的详细信息。

xmlns="http://musicbrainz.org/ns/mmd-2.0#" 

Sample Demo

【讨论】:

    【解决方案2】:

    尝试以下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Linq;
    using System.Net;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            const string URL = @"http://musicbrainz.org/ws/2/release-group/?query=artist:%22coldplay%22%20AND%20primarytype:%22single%22";
            static void Main(string[] args)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
                request.UserAgent = "Hello World Super Script";
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                XDocument doc = XDocument.Load(response.GetResponseStream());
                XNamespace ns = doc.Root.GetDefaultNamespace();
    
                List<Group> groups = doc.Descendants(ns + "release-group").Select(x => new Group()
                {
                    title = (string)x.Element(ns + "title"),
                    name = (string)x.Descendants(ns + "name").FirstOrDefault(),
                    releaseTitles = x.Element(ns + "release-list").Descendants(ns + "title").Select(y => (string)y).ToArray()
                }).ToList();
            }
        }
        public class Group
        {
            public string title { get; set; }
            public string name { get; set; }
            public string[] releaseTitles { get; set; }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 2021-10-18
      • 1970-01-01
      • 2013-05-09
      相关资源
      最近更新 更多