【发布时间】: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,这很糟糕。