xml XElement显示空指针异常

时间:2018-12-17 21:26:35

标签: c# xml linq

我正经历着最糟糕的时光,因为我通常不处理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>

因此,由于我知道该节点在那里并且有效,

1 个答案:

答案 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) { ... }