修复错误的XML文件(例如,未转义等)

Ant*_*ula 13 .net xml xmltextreader

我从第三方获得了一个我必须在我的应用程序中导入的XML文件,并且XML具有未转义和内部文本的元素,并且他们不会解决这个问题!所以我的问题是处理这个问题的最佳方法是什么?

这个XML非常大,而且修复速度必须很快,我的第一个解决方案就是用&符替换&字符,但实际上我不喜欢这个"解决方案",原因很明显.我不知道如何使用XmlStringReader与这样的XML,因为在这样的行上抛出异常,所以我不能在内部文本上使用HtmlEncode.我试图将XmlTextReader设置Settings.CheckCharacters为false但没有结果.

这是示例,&是元素,并且在该字段中可以是某些公司名称中的任何内容,因此我的替换修复可能不适用于其他公司名称,我想以某种方式使用HtmlEncode,但仅限关于内在文本当然.

<komitent ID="001398">
  <sifra>001398</sifra>
  <redni_broj>001398</redni_broj>
  <naziv>LJUBICA & ŽARKO</naziv>
  <adresa1>Odvrtnica 27</adresa1>
  <adresa2></adresa2>
  <drzava>HRVATSKA</drzava>
  <grad>Zagreb</grad>
</komitent>
Run Code Online (Sandbox Code Playgroud)

Pau*_*her 4

下面的关键信息是,除非您知道输入文件的确切格式,并保证与 XML 的任何偏差都是一致的,否则您无法以编程方式进行修复,否则会冒修复不正确的风险。

当且仅当以下情况时,通过替换&为来修复它是可接受的解决方案:&amp;

  1. 这些数据没有可接受的格式良好的来源。

    • 正如@Darin Dimitrov 评论的那样,尝试找到更好的提供商,或者让该提供商修复它。
    • 即使您不使用 javascript,JSON(例如)也比格式不良的 XML 更可取。
  2. 这是一次性(或至少极其罕见)的导入。

    • 如果您必须在运行时获取它,那么这个解决方案将不起作用。
  3. 您可以不断迭代,为其设计新的修复程序,并在遇到每个问题时添加解决方案。

    • 您可能会发现,一旦通过转义&字符“修复”了它,还会出现其他错误。
  4. 您有资源手动检查“固定”数据的完整性。

    • 您“修复”的错误可能比您意识到的更微妙。
  5. 文档中没有格式正确的实体 -

    • 简单地替换&&amp;将错误地更改&quot;&amp;quot;。您也许能够解决这个问题,但不要天真地认为它可能有多么棘手(实体可能在 DTD 中定义,可能引用 unicode 代码点...)

    • 如果是一个行为不当的特定元素,您可以考虑用 包装该元素的内容 <![CDATA ]]>,但这仍然依赖于您能够可靠地找到开始和结束标记。