Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#XMLTextWriter-XML1.1_C#_Xml_Xml 1.1 - Fatal编程技术网

C#XMLTextWriter-XML1.1

C#XMLTextWriter-XML1.1,c#,xml,xml-1.1,C#,Xml,Xml 1.1,我正在处理一个处理C#中字符串本地化的大型XML文件。我没有编写生成XML的程序,但我可以访问源代码,我想修改它,因为它当前输出1.0版本,但文档中包含非法字符 下面是代码当前的编写方式 XmlTextWriter xr = new XmlTextWriter(fileName, Encoding.UTF8); xr.Formatting = Formatting.Indented; xr.Indentation = 4; xr.WriteStartDocument(); xr.WriteSt

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

下面是代码当前的编写方式

XmlTextWriter xr = new XmlTextWriter(fileName, Encoding.UTF8);
xr.Formatting = Formatting.Indented; 
xr.Indentation = 4;
xr.WriteStartDocument();
xr.WriteStartElement("tlkFile");
// ...
然而,报告指出,它使用的是XML版本1.0。我知道这是行不通的,因为我正在编写一个java解析器来修改这个XML,它无法加载,因为它包含不允许的unicode字符。特别是
和#x18显示为“取消”。我不知道这是为什么。。。不过,该文件大约有500000行

在我的java解析器将标题转换为1.1之前,我手动更改了标题,结果成功了。从技术上讲,我可以将XML修改为字符串,然后对其进行解析,但我宁愿使用正确的XML

我找不到任何办法来改变这一点。我真的无法将该工具更改为使用其他形式的XML编写,因为它是一个使用的共享开源项目,而且我对C#不是很在行


有什么诀窍吗?

使用以下过程:

  • 创建IXmlSerializable接口的自定义实现
  • 手柄
    使用自定义方法
  • 使用实现的实例来读取文档
参考资料


能否将WriteStartDocument()替换为WriteRaw(“”)并删除WriteEndDocument()?

如何指定要写入的内容?e、 g.
WriteString
?有一些关于无效字符的备注。XmlTextWriter在将文本数据写入文档时在内部使用。该类型仅限于XML 1.0中有效的字符。我非常怀疑您是否能够使用正常方式将
\x18
写入XML文档。正在编写的内容是一个反编译的本地化文件(Talkfile,TLK),用于不真实的引擎游戏。如果我手动将头更改为使用1.1,我可以让java解析并编写它。我进一步查看了文档,我认为.NET甚至不支持1.l,这太糟糕了。