使用C ++中的EXPAT XML解析器在CDATA中丢失空格围绕逃脱的符号
-
19-09-2019 - |
题
我正在使用XML在应用程序之间发送项目信息。项目描述之一是信息。所以我有:
<ProjectDescription>Test & spaces around&some & amps!</ProjectDescription>
或:“周围的测试和空间以及一些和放大器!” < - 好!
然后,当我使用Expat来解析时,我的数据处理程序一次只能获得整个字符串的一部分。 “测试”,然后是“&”,然后是“周围的空格”,下一个“&”等。看他们。然后,当我重写XML时,我会得到:
<ProjectDescription>Test&spaces around&some&amps!</ProjectDescription>
或:“周围的测试和空间!” < - 不好!
这是现有解决方法的已知问题吗?我可以提供一些设置,以控制其围绕逃逸符号的行为?
我在谷歌搜索答案的尝试中遇到了惨淡的失败。
编辑:回答评论中的问题:我有自己的处理程序,我在解析器中注册:
parser=XML_ParserCreate(NULL);
XML_SetUserData(parser,&depth);
XML_SetElementHandler(parser,startElement,endElement);
XML_SetCharacterDataHandler(parser,dataHandler);
该处理程序的声明如下:
static void dataHandler(void *userData,const XML_Char *s,int l)
然后“ S”包含元素中的数据。如果没有任何内容,则是“带有空格的字符串”的打开标签和关闭标签之间的整个字符串。
解决方案
我刚刚使用自己的图书馆进行了一个使用Expat的测试。我的处理程序看起来像这样,带有调试语句以显示正在发生的事情:
void CharDataHandler( void * parser,
const XML_Char *s,
int len ) {
std::cerr << "[" << s << "]\n";
std::cerr << len << "\n";
// my own processing here - not important
}
我看不到您在谈论的行为。对于输入数据:
XXX & YYY
我以char *和长度数据集的身份获得了三个事件:
char * = "XXX & YYY"
length = 4
char * = "&"
length = 1
char * = " YYY"
length = 4
因此保留了空间。据我所知,我没有使用任何特定设置。您正在使用哪个版本和平台?
不隶属于 StackOverflow