【问题标题】:C# XMLTextWriter - XML 1.1C# XMLTextWriter - XML 1.1
【发布时间】:2014-12-05 06:12:11
【问题描述】:

我正在处理一个处理 C# 中字符串本地化的大型 XML 文件。我没有编写生成 XML 的程序,但我可以访问源代码并且我想修改它,因为它当前输出 1.0 作为版本,但它在文档中包含非法字符。

以下是当前编写代码的方式。

XmlTextWriter xr = new XmlTextWriter(fileName, Encoding.UTF8);
xr.Formatting = Formatting.Indented; 
xr.Indentation = 4;
xr.WriteStartDocument();
xr.WriteStartElement("tlkFile");
// ...

但是WriteStartDocument() documentation states 它使用 XML 版本 1.0。我知道这不起作用,因为我正在编写一个修改此 XML 的 java 解析器,并且它无法加载,因为它具有不允许的 unicode 字符。特别是,这似乎是取消。我不知道为什么会出现在这里...不过文件大约有 500000 行。

在我的 java 解析器将它抓取到 1.1 之前,我手动更改了标题,它工作正常。从技术上讲,我可以将 XML 修改为字符串,然后对其进行解析,但我宁愿使用正确的 XML。

我找不到任何方法来改变这一点。我无法真正更改工具以使用其他形式的 XML 编写,因为它是一个共享的开源项目,并且我对 C# 不太擅长。

这有什么诀窍吗?

【问题讨论】:

  • 你如何指定要写的内容?例如WriteString? WriteString 对无效字符有几点意见。
  • XmlTextWriter 在将文本数据写入文档时在内部使用XmlCharType。该类型仅限于在 XML 1.0 中有效的字符。我非常怀疑您甚至可以使用普通方式将\x18 写入您的 XML 文档。
  • 正在写入的内容是在虚幻引擎游戏中使用的反编译的本地化文件(Talkfile,TLK)。如果我将标头更改为手动使用 1.1,我可以让我的 java 解析和编写它。我又查看了一些文档,我认为 .NET 甚至不支持 1.l,这很糟糕。

标签: c# xml xml-1.1


【解决方案1】:

使用以下流程:

  • 创建 IXmlSerializable 接口的自定义实现
  • 使用自定义方法处理
  • 使用实现的实例来读取文档

参考文献

【讨论】:

    【解决方案2】:

    您能否将 WriteStartDocument() 替换为 WriteRaw("") 并删除 WriteEndDocument()?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多