我正经历着最糟糕的时光,因为我通常不处理XML文档。
我进入循环的XML XNode列表很长,我需要将节点的一个特定元素存储在数组中。
问题是,但是,我一直有NullPointerException异常,并且正在绘制空白。
我的代码:
Console.WriteLine("Items found: " + doc.Root.Nodes().Count());
foreach (XNode node in doc.Root.Nodes())
{
XElement betternode = XElement.Parse(node.ToString());
Console.WriteLine(betternode.Element("loc").Value); //Null Exception here
}
计数显示文档中的24,000个节点。节点以本地语言显示,当我将节点内容复制到W3验证器时,它说XML格式正确。
节点看起来像这样:
<url xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<loc>http://url.to/my.jpg</loc>
<image:image xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<image:loc>http://url.to/my.jpg</image:loc>
<image:title>Huge spider</image:title>
<image:caption></image:caption>
</image:image>
</url>
因此,由于我知道该节点在那里并且有效,
答案 0 :(得分:0)
<url>
元素定义默认名称空间“ http://www.sitemaps.org/schemas/sitemap/0.9”。因此,在访问loc
元素时需要使用它。
您需要这样的东西
XNamespace x = "http://www.sitemaps.org/schemas/sitemap/0.9";
betternode.Element(x + "loc").Value
另一种方式:
XNamespace x = "http://www.sitemaps.org/schemas/sitemap/0.9";
var locations = doc.Descendants(x + "loc");
foreach (var loc in locations) { ... }