阅读特定的XML

时间:2015-01-01 09:09:42

标签: c# xml windows windows-phone-8

我有这个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类和palinsesto类中的值,我尝试在这种模式下但不能正常工作

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();

始终返回错误

2 个答案:

答案 0 :(得分:2)

看起来你误解了名字,属性和元素。看起来你只想要这样的东西:

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;

然而:

  • 目前你的前三个元素都没有关闭,这会导致上述因素失败;目前还不清楚你的真正的 XML会是什么样子。你应该缩进它以显示预期的结构。
  • 您的日期没有以正常的方式表示XML - 如果您控制XML,那么最好使用2014-12-31
  • 的值
  • 上面的代码假设您只想要根目录中的第一个元素。如果情况并非如此,那么您需要向我们提供更多信息

答案 1 :(得分:1)

您在此处不需要此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();