首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析XML数据(2,2)

解析XML数据(2,2)
EN

Stack Overflow用户
提问于 2014-08-15 22:39:28
回答 2查看 46关注 0票数 0

当我试图反序列化XML时,我遇到了一个独特的问题。

该方法如下:

代码语言:javascript
复制
XmlSerializer serialize = new XmlSerializer(typeof(APIFile));
using(FileStream stream = new FileStream(file, FileMode.Open))
     using(XmlReader reader= XmlReader.Create(stream))
     {
          APIFile model = serialize.Deserialize(reader) as APIFile;
          Console.WriteLine(model.lSubmission.Select(m => m.Id));
     }

因此,当代码击中model时,我会收到一个错误声明:

  • xmlns="> Was not expected.
  • There is an error in XML document (2,2).

所构建的模型是通过-过去的特殊-- XML类来填充的。

我篡改了以下几行:

代码语言:javascript
复制
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]

我修改了这句话:

  • 命名空间
  • xmlns
  • 把线移开。
  • 从根属性更改

但是错误仍然存在,我不完全确定原因。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<CanvasResult>
     <TotalPages>8</TotalPages>
     <CurrentPage>1</CurrentPage>
     <Submissions>
          <Submission Id="5840790">
               <Form Id="718013">
                    <Name>Proof of Delivery</Name>
                    <Status>retired</Status>
                    <Version>6</Version>
               </Form>

这是XML的第一个小部分,之后是一些更小的内容/部分,它将进一步构建。我的文档在文件中的任何地方都没有xmlns,是否可能读取器或XmlSerializer正在添加它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-19 20:15:13

我设法把这个问题隔离到几个项目上:

  • 数据模型没有处理插入的所有内容。
  • 第三方API在XML中传递&,这也导致了一个错误。

我编写了一个简单的验证方法,在文件中运行,以验证XML并修复任何格式错误的标记或符号。

最终反序列化这些值的代码是:

代码语言:javascript
复制
    public static void ParseToModel(string file)
    {
        if (string.IsNullOrEmpty(file))
            throw new ArgumentNullException();

        XmlSerializer serialize = new XmlSerializer(typeof(CanvasResult));
        using(FileStream stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
            using(XmlReader reader= XmlReader.Create(stream))
            {
                CanvasResult model = serialize.Deserialize(reader) as CanvasResult;
                ParseToDatabase(model);
            }
    }

调用该方法,该方法将接受文件参数,然后将内容与数据模型关联。最后,它调用一个名为ParseToDatabase的单独方法,该方法分解内容并放入数据库中的适当列中。

票数 0
EN

Stack Overflow用户

发布于 2014-08-15 22:59:45

我发现处理xml最简单的方法是使用XDocuments / XElements .

代码语言:javascript
复制
using(var reader = StreamReader(new FileStream(file, FileMode.Open)))
{
   var data = reader.ReadToEnd();
   var xml = new XElement(data);
   //TODO: query xml with linq or whatever
}

使用完整的文档和片段

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25335194

复制
相关文章

相似问题

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