阅读特定 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
- 以上代码假定您只需要根中的第一个元素。如果不是这样,您需要向我们提供更多信息
我有这个 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
- 以上代码假定您只需要根中的第一个元素。如果不是这样,您需要向我们提供更多信息