我正在使用XML在应用程序之间发送项目信息。项目描述之一是信息。所以我有:

<ProjectDescription>Test &amp; spaces around&amp;some  &amp;  amps!</ProjectDescription>

或:“周围的测试和空间以及一些和放大器!” < - 好!

然后,当我使用Expat来解析时,我的数据处理程序一次只能获得整个字符串的一部分。 “测试”,然后是“&”,然后是“周围的空格”,下一个“&”等。看他们。然后,当我重写XML时,我会得到:

<ProjectDescription>Test&amp;spaces around&amp;some&amp;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 &amp; YYY

我以char *和长度数据集的身份获得了三个事件:

char * = "XXX &amp; YYY"
length = 4

char * = "&"
length = 1

char * = " YYY"
length = 4

因此保留了空间。据我所知,我没有使用任何特定设置。您正在使用哪个版本和平台?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top