2014-12-05 42 views
2

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

这是代码当前写出的方式。

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#并不擅长。

这有什么窍门吗?

+1

如何指定要写入的内容? xml.xmlwriter.writestring(v = vs.110).aspx)对无效字符有一些评论 – 2014-12-05 07:30:46

+0

XmlTextWriter内部使用['XmlCharType'](http://referencesource.microsoft.com/#System.Xml/System /Xml/XmlCharType.cs),这种类型仅限于在XML 1.0中有效的字符,我非常怀疑你甚至可以使用普通的方法在你的XML文档中写入'\ x18' – Tomalak 2014-12-05 07:44:08

+0

正在编写的内容是一个反编译的本地化文件(Talkfile,TLK),用于虚幻引擎游戏。如果我手动更改头文件以使用1.1,我可以让我的java解析并编写它。更多,一个d我不认为.NET甚至支持1.l,这很糟糕。 – Mgamerz 2014-12-05 07:56:06

回答

0

你能与WriteRaw替换WriteStartDocument()(” <?XML版本= \ “1.1 \”? (WriteString`)['WriteString`](http://msdn.microsoft.com/zh-cn/library/system。),并删除WriteEndDocument()?