我有xml
<?xml version="1.0" encoding="UTF-8"?>
<info lang="ru" xmlns:x="http://www.yandex.ru/xscript">
<region id="213" lon="37.617671" lat="55.755768" zoom="10">
<title>Москва</title>
</region>
<traffic lon="37.617671" lat="55.755768" zoom="10"region="213">
<length>489164.0</length>
<level>6</level>
<icon>yellow</icon>
<timestamp>1365162401</timestamp>
<time>15:46</time>
<url>http://maps.yandex.ru/moscow_traffic</url>
<title>Москва</title>
</traffic>
</info>
我需要从“级别”获得价值
public void GetText(string filename)
{
try
{
XDocument xDocument = LoadPage(filename);
if (xDocument.Root == null) return;
XElement elem = xDocument.Root.Element("info");
if (elem != null)
foreach (var el in elem.Elements("traffic"))
{
Name = el.Element("level").Value;
};
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
这段代码适用于另一个xml。它找不到“info”,而elem = null。这段代码出了什么问题。或者我怎样才能以其他方式获得此值。谢谢!
答案 0 :(得分:3)
这是问题所在:
XElement elem = xDocument.Root.Element("info");
在您提供给我们的XML中,xDocument.Root
是 info
元素。只需将其更改为:
XElement elem = xDocument.Element("info");
这将检查根元素 info
。
另一种选择是:
foreach (var el in xDocument.Elements("info")
.Elements("traffic"))
这样,如果Elements(info)
返回一个空集合,你就不会进入循环体。
编辑:如果您需要它来处理有时 info
是根元素的文档,有时它不是,您可能想要使用:
foreach (var el in xDocument.Descendants("info")
.Take(1)
.Elements("traffic"))
(虽然在那种情况下很奇怪。)