我正在使用.net框架的XmlTextWriter从C#写出一些xml。这没问题。我写的一些字符串包含字符值5(注意我并不是指字符'5',但我的意思是ascii值为5)。
现在,我从xml规范中了解到这个字符在xml中是非法的。但是,我不在乎它是否非法,我想在我的xml(不符合)文档中。这样我就可以编写一个可能包含一些二进制数据的字符串。
好的,所以System.Xml.XmlTextWriter会将这些非法的xml字符写好,并将它在xml中编码为"x;"
。但是,我想通过使用MSXML2.SAXXMLReader.6.0在C ++应用程序中阅读它们。当遇到其中一个字符时,此解析器会引发fatalError。
我尝试修改解析器的一些属性以使其工作。我的理解是IE在内部使用了这个解析器,我可以用IE加载非法的xml。那么,当我不能的时候,IE如何设法解析它。
我错过了什么吗? IE是否使用不同的解析器。有没有办法让MSXML2.SAXXMLReader.6.0解析器工作?我是否需要使用不同的解析器(如果是这样,你能推荐一个有源代码可用的解析器吗?如果不能做我想要的话我可以解决它吗?)
我可以在.Net解析器上设置一个属性,以允许解析这些非法字符。我想我正在寻找一个可以在C ++中使用SAX解析器的等价物。 http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.checkcharacters.aspx
非常感谢,
斯科特
注意我不相信CDATA部分会允许对此字符进行编码。看这里:
http://msdn.microsoft.com/en-us/library/ms256076(VS.85).aspx
即使它确实如此。我不想使用CDATA部分,我想在属性值中使用该字符。我也意识到我可以对它进行base64编码,但我也不想这样做......我想破法,我希望能够解析非法的xml。
答案 0 :(得分:2)
不,不可能在XML中解析控制字符。
确切地说,这会使您的文档不是XML文档。
这是规范的硬连线部分。如果要解析非法字符,则必须编写自己的NON-COMPLIANT解析器。
按照: