我正在使用XML在应用程序之间发送项目信息。其中一条信息是项目描述。所以我有:
<ProjectDescription>Test & spaces around&some & amps!</ProjectDescription>
或者:“测试&amp;空间和&amp; amp&amp; amps!” &lt; - 好!
当我然后使用Expat来解析它时,我的数据处理程序一次只获取整个字符串的一部分。 “测试”,然后是“&amp;”,然后是“空间”,下一个“&amp;”等等。当我尝试重建原始字符串时,&amp; s周围的所有间距都被删除,因为数据处理程序永远不会看到它们。当我重新编写XML时,我得到了:
<ProjectDescription>Test&spaces around&some&amps!</ProjectDescription>
或者:“测试&amp;空间和&amp; amp&amp; amps!” &lt; - BAD!
这是现有解决方法的已知问题吗? 是否有一些设置我可以让Expat控制其在转义符号周围的行为?
我在谷歌搜索答案的尝试遇到了惨淡的失败。
编辑:回答评论中的问题: 我有自己的处理程序,我在解析器中注册:
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”包含元素中的数据。没有任何&amp;东西,它是打开和关闭标签之间的整个字符串,在“带空格的字符串”的情况下。
答案 0 :(得分:0)
我刚用我自己的使用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
因此保留了空格。据我所知,我没有使用任何specal设置。什么版本&amp;您正在使用Expat平台吗?