【问题标题】:Read particular XML读取特定的 XML
【发布时间】:2015-01-01 09:09:42
【问题描述】:

我有这个 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();

总是返回错误

【问题讨论】:

  • 错误是什么?您的 XML 当前无效。它缺少一个根元素。
  • 正如@YuvalItzchakov 所说,您的XML 不是有效的XML。您应该使用 XDocument.Parse() 方法并传入字符串,注意错误消息并纠正您的输入数据,然后才能开始查询结果。
  • 'System.Exception' 在 System.Windows.ni.dll 上,xml 不是我的,我只需要读取值,php 很简单,但在 C# 上没有 =(
  • @user3477026:不,C# 非常非常简单——你只是做错了。不清楚您所说的“xml 不是我的”是什么意思 - 请澄清,并确保您在问题中提供的 XML 是有效示例。此外,如果您遇到异常,您应该始终在问题中提供详细信息(堆栈跟踪、错误消息、任何内部异常)。

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


【解决方案1】:

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

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;

但是:

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

【讨论】:

    【解决方案2】:

    这里不需要XNameoverload - 第二个参数用于提供命名空间,它在您提供的 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 2013-10-22
      • 2015-12-18
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 2019-12-28
      相关资源
      最近更新 更多