【问题标题】:How to workaround 0x01 invalid character exception. Using Xdocument如何解决 0x01 无效字符异常。使用 Xdocument
【发布时间】:2016-08-08 11:27:35
【问题描述】:

我试图用一堆 xml 文件解析一个文件夹。 xml 文件包含有关某些车辆的信息。 XML 文件是自动生成的,其中一些包含无效字符。问题是,文件太多,我无法手动更正它们。所以我想知道如何绕过无效字符异常? 这是某些 xml 文件中的无效行:

<ECU EcuName="ABS" EcuFamily="BSS" CplNo="&#01;" Address="0x0B" ConfigChecksum="0x00000000" Updated="false">

我尝试使用 Streamreader 没有任何成功。这是我的代码:

 XDocument docs = XDocument.Load(new System.IO.StreamReader((path), Encoding.GetEncoding("utf-8")));                
            var nameValues =
                from fpc in docs.Descendants("FPC")
                select new
                {
                    Name = (string)fpc.Attribute("Name"),
                    Value = (string)fpc.Attribute("Value")
                };

【问题讨论】:

  • 从什么开始创建文件?最好解决这个问题。
  • 在更新车辆时,该文件由不同的软件更新程序创建。 xml 文件包含有关车辆的自动生成信息,该信息由我无法控制的另一个程序生成。 @JonSkeet
  • 这很尴尬。您可以读取每个文件并将&amp;#01; 替换为空字符串,例如...这是唯一的无效字符,以及它出现的唯一格式吗?
  • 我知道,问题是 xml 文件是只读文件。所以我不能改变他们的任何东西。 @JonSkeet

标签: c# xml linq-to-xml invalid-characters


【解决方案1】:

如果需要,可以使用例如加载文件

XDocument doc;
using (XmlReader xr = XmlReader.Create(path, new XmlReaderSettings() { CheckCharacters = false }))
{
  doc = XDocument.Load(xr);
}
// now query document here

这将通过您所展示的字符引用获得,而不是通过不允许的文字字符获得。​​

【讨论】:

  • 我怎样才能允许所有字符??
  • 您不能,不是使用 XML 解析器,因为 XML 规范定义了允许的字符,并且不允许使用制表符、换行符或回车符以外的控制字符。基本上你的输入不是格式良好的 XML。
猜你喜欢
  • 2018-02-26
  • 1970-01-01
  • 2012-04-20
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
相关资源
最近更新 更多