使用 xerces 解析 xml 时出现''

'' appears when parse xml with xerces

本文关键字:xerces 解析 xml 使用      更新时间:2023-10-16

下面是我的代码:

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>rn
<somenode someattr="abc@def"/>rn
</root>"

然后我使用xmlString.replace(‘@’,' 0 ')添加' 0"。

这里是问题:如果xmlString中包含'',解析器将报告错误:"输入的意外结束"。我认为这是因为''。但我确信xmlString是完整的,xmlString.length()是正确的。所以我试着把这个''移到CDATA:

xmlString = "
<root>rn
<somenode>rn
<![CDATA[abcdef]]>rn
</somenode>rn
</root>"

然后解析器报告"unexpected end of CDATA"…我能做些什么来解决这个问题?任何建议都可以!!

在C/c++中,cstrings以结束,所以你可以告诉字符串在哪里结束,而不需要传递它的长度作为单独的参数。一般来说,您不希望将此字符放在这样的字符串的中间,因为您将丢失该字符后面的所有内容。