gpt4 book ai didi

c++ - 在 C++ 中使用 Expat XML 解析器丢失 CDATA 中转义符号周围的空格

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:29 26 4
gpt4 key购买 nike

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

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

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

然后当我使用 Expat 解析它时,我的数据处理程序一次只获取整个字符串的一部分。“测试”,然后是“&”,然后是“周围的空格”,下一个“&”,等等。当我尝试重建原始字符串时,&'s 周围的所有间距都被删除了,因为数据处理程序永远不会看他们。当我重新编写我得到的 XML 时:

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

或者:“测试&周围的空间&一些&放大器!” <-- 不好!

这是现有解决方法的已知问题吗?是否有一些设置可以让 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”包含元素中的数据。没有任何 & 的东西,它是开始和结束标签之间的整个字符串,在“带空格的字符串”的情况下。

最佳答案

我刚刚用我自己的使用 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

所以空格被保留了下来。据我所知,我没有使用任何特殊设置。您使用的是什么版本和平台的 Expat?

关于c++ - 在 C++ 中使用 Expat XML 解析器丢失 CDATA 中转义符号周围的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1900160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com