【发布时间】:2014-07-10 10:59:09
【问题描述】:
这是我的代码:
XercesDOMParser domParser;
MemBufInputSource* basic_mem = new MemBufInputSource(
(const XMLByte* )(xmlString.c_str()),//xmlString is a std::string that contains xml
xmlString.length(),//this std::string's length
"dummy");
ParserErrorHandler parserErrorHandler;
domParser.setErrorHandler(&parserErrorHandler);
domParser.setExitOnFirstFatalError(true);
domParser.setValidationConstraintFatal(true);
domParser.setValidationScheme(XercesDOMParser::Val_Auto);
domParser.setDoNamespaces(true);
domParser.setDoSchema(true);
domParser.parse(*basic_mem);
我的xml字符串是这样的:
xmlString = "\
<root>\r\n\
<somenode someattr="abc@def"/>\r\n\
</root>"
然后我使用 xmlString.replace('@','\0') 添加 '\0' in。
问题来了:如果xmlString里面包含'\0',解析器会报错: “输入意外结束”。我认为这是因为'\ 0'。但我确信 xmlString 是完整的,并且 xmlString.length() 是正确的。 所以我试图将这个 '\0' 移动到 CDATA 中:
xmlString = "\
<root>\r\n\
<somenode>\r\n\
<![CDATA[abc\0def]]>\r\n\
</somenode>\r\n\
</root>"
然后解析器报告“CDATA意外结束”... 我能做些什么来解决这个问题?任何建议都会完成!
【问题讨论】:
-
NUL字符在 XML 中是不允许的。见XML specification。