TinyXML 解析 XML 格式的字符串返回 NULL?

发布于 2024-11-09 16:40:00 字数 400 浏览 0 评论 0原文

我正在尝试使用 TinyXML 来解析 XML 格式的字符串。但返回指针始终为NULL。我不确定哪部分代码设置错误。

TiXmlDocument docTemp;
const string strData = "<?xml version=\"1.0\" ?><Hello>World</Hello>";
const char* pTest = docTemp.Parse(strData.c_str(), 0 , TIXML_ENCODING_UTF8);
if(pTest == NULL){
    cout << "pTest is NULL" << endl;
}

它总是显示“pTest 为 NULL” 有什么想法吗?

非常感谢!

I'm trying to use TinyXML to parse a string with XML format. But the return pointer is always NULL. I'm not sure which part of code is setting wrong.

TiXmlDocument docTemp;
const string strData = "<?xml version=\"1.0\" ?><Hello>World</Hello>";
const char* pTest = docTemp.Parse(strData.c_str(), 0 , TIXML_ENCODING_UTF8);
if(pTest == NULL){
    cout << "pTest is NULL" << endl;
}

It always shows 'pTest is NULL'
Any idea?

Thanks a bunch!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

俏︾媚 2024-11-16 16:40:00

如果出现错误,它应该返回 0,但看起来 TiXmlBase::SkipWhiteSpace 中存在错误,如果右括号后面没有字符,则返回 0,但如果有空格或 \r 或 \n,则返回指针。因此,您有两个选择在右括号后添加一些白色字符,或者将 SkipWhiteSpace: 开头的以下行修改为

if ( !p || !*p )
{
    return 0;
}

if ( !p )
{
   return 0;
}
if (!*p)
{
   return p;
}

It should return 0 in the case of an error but looks like there is bug in TiXmlBase::SkipWhiteSpace, if there is no character after the closing bracket it returns 0, but if there is a white space or \r or \n it returns the pointer. So you have 2 options add some white character after the closing bracket or modify the following lines in at the beginning of SkipWhiteSpace:

if ( !p || !*p )
{
    return 0;
}

to something like:

if ( !p )
{
   return 0;
}
if (!*p)
{
   return p;
}
给不了的爱 2024-11-16 16:40:00
 if(pTest == NULL && docTemp->Error() ){
        cout << "pTest is NULL" << endl;
    }
 if(pTest == NULL && docTemp->Error() ){
        cout << "pTest is NULL" << endl;
    }
给我一枪 2024-11-16 16:40:00

看起来解析成功时返回 null。

您能看到 docTemp.RootElement() 是否包含有效元素吗?

It seems like the parse returns null on success.

Can you see if docTemp.RootElement() contains a valid element ?

菊凝晚露 2024-11-16 16:40:00

看起来 TiXMLDocument::Parse 在失败的情况下返回 NULL ,而在解析成功时返回指向右尖括号旁边的字符的指针。

Looks like TiXMLDocument::Parse returns NULLin the case of failure and the pointer to the character next to closing angle bracket, when parsing was succesful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文