首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XML: XElement.Parse正在引发异常

XML: XElement.Parse正在引发异常
EN

Stack Overflow用户
提问于 2015-11-10 18:47:44
回答 4查看 1.7K关注 0票数 0

我有一个xml字符串列表,需要解析这些字符串并将其加载到c#类中。我得到了空引用异常,并认为它的“根”原因是xml中使用的命名空间。我对xml不是很熟悉,所以如果这个解决方案看起来很糟糕,请提供替代方案。

下面是解析代码:

代码语言:javascript
运行
复制
XNamespace ns = "http://www.example.com/schema/msc/message";
XNamespace ns2 = "http://www.example.com/schema/msc/referral";

// data is List<string>
Parallel.ForEach(data, item =>
{
   var root = XElement.Parse(item);
   var dto = new DTO
       {
         RoutingCode = (string)root.Element("Message")
               .Element(ns + "Params")
               .Element(ns + "Events")
               .Attribute("Code")
         User = new UserDTO
                    {
                     AccountName = (string)root.Element("Message")
                                  .Element("Params")
                                  .Element("Events")
                                  .Element("ref:User")
                                  .Element("Name")
                    }
       };
     list.Add(dto);
});

下面是一个示例xml元素(减小了可读性)

代码语言:javascript
运行
复制
<Message xmlns="http://www.example.com/schema/msc/message">
  <Params> 
    <Events xmlns="http://www.example.com/schema/msc/referral" Code="AC">
      <ref:User xmlns:ref="http://www.example.com/schema/msc/referral" Name="asdf"/>
    </Events>
  </Parama>
</Message>
EN

Stack Overflow用户

发布于 2015-11-10 21:07:32

尝试将命名空间链接到XElement

代码语言:javascript
运行
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string item =
                "<Message xmlns=\"http://www.example.com/schema/msc/message\">" +
                  "<Params>" +
                    "<Events xmlns=\"http://www.example.com/schema/msc/referral\" Code=\"AC\">" +
                      "<ref:User xmlns:ref=\"http://www.example.com/schema/msc/referral\" Name=\"asdf\"/>" +
                    "</Events>" +
                  "</Params>" +
                "</Message>";

            XElement root = XElement.Parse(item);
            XNamespace ns1 = root.Name.Namespace;
            XNamespace ns2 = root.Descendants().Where(x => x.Name.LocalName == "Events").FirstOrDefault().Name.Namespace;

        }
    }
}​

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33637284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档