阅读特定 XML

Read particular XML

我有这个 XML:

<palinsesto>
<giorno label="Mer" data="2014/12/31">
<canale description="Premium Cinema" id="KE">
<prg Pod="N" Nettv="N" orafine="06:30" orainizio="06:00" replica="No" primaTv="No">
<durata duratapixel="30">30</durata>
<tipologia>Type</tipologia>
<titolo>evento iniziato ieri</titolo>
<descrizione>--</descrizione>
<audio sottotitoli="No subtitles" audioType="Mono" doppioAudio="One language">Not used</audio>
<parentalRating>LIBERO DA DIVIETI</parentalRating>
<trafficLight/>
<anno>--</anno>
<paese>--</paese>

并且我需要读取 prg class 和 palinsesto class 中的值,我在这种模式下尝试但不起作用

XDocument doc = XDocument.Parse(e.Result);
    var canal = doc.Descendants(XName.Get("description", "canale")).FirstOrDefault();
    var date = doc.Descendants(XName.Get("data", "giorno")).FirstOrDefault();
    var title = doc.Descendants(XName.Get("titolo", "prg")).FirstOrDefault();

总是返回错误

此处不需要此 XName overload - 第二个参数用于提供名称空间,您提供的 xml 中不存在该名称空间。我相信您混淆了属性和 xmlns 名称空间。为了获取属性,使用.Attributes(),如下:

var canal = doc.Descendants("canale").Attributes("description").FirstOrDefault();
var date = doc.Descendants("giorno").Attributes("data").FirstOrDefault();
var title = doc.Descendants("prg").Attributes("titolo").FirstOrDefault();

看来您误解了名称、属性和元素。看起来你只是想要这样的东西:

XDocument doc = XDocument.Parse(e.Result);
var root = doc.Root;
var canal = root.Element("canale").Attribute("description").Value;
var date = root.Element("giorno").Attribute("data").Value;
var title = root.Element("titolo").Value;

但是:

  • 目前 none 您的前三个元素已关闭,这将导致上述操作失败;不清楚您的 real XML 会是什么样子。您应该缩进它以显示预期的结构。
  • 您的日期未以 XML 的正常方式表示 - 如果您控制 XML,最好使用值 2014-12-31
  • 以上代码假定您只需要根中的第一个元素。如果不是这样,您需要向我们提供更多信息