繁体   English   中英

为什么TinyXPath在两个不同的类中调用时会为同一个对象提供不同的结果?

[英]Why does TinyXPath give different results for the same object when called in two different classes?

我正在Ubuntu上构建一个项目,我正在使用TinyXPath库和TinyXml来解析以下xml:

<nodes>
    <node attribute1="1" attribute2="2" />
    <node attribute1="2" attribute2="3" />
    ...
    <node attribute1="10" attribute2="11" />
</nodes>

要找出包含的节点条目数,我正在使用:

TinyXPath::i_xpath_int( xml_root,"count(/nodes/node)")

显然,在一个对象中使用此函数调用返回实际的节点数,10; 但是在另一个对象(一个不同的类类型)中使用它,它总是返回0.我检查过两个情况下xml_root是否是同一个对象,并且两个对象具有相同的地址。 打印内容给了我相同的xml。

相反,如果我使用TinyXML,我会得到正确的结果,我甚至可以访问所有的属性并获得正确的结果。 以下代码给出了正确的no_nodes:

for(node = xml_root->FirstChild(); node; node = node->NextSibling())
    no_nodes++;

这是奇怪的部分。 如果我在Windows 7上构建这个项目,它的工作正常。 函数调用始终返回正确数量的节点。 以前有人遇到过这种问题吗?

PS:我知道我没有就这个问题给出很多具体细节,但这是一个庞大的项目,我需要几天的时间来解释这一切。 所以这只是在黑暗中拍摄的。

通过使用gdb,我发现“count(/ products / product)”没有解析问题,正如我最初想的那样。

问题是我的项目使用了很多不同的库。 其中一个库使用了tinyxpath使用的tinyxml的不同版本。

当我从我的项目链接该类的二进制文件时,其中tinyxpath不起作用,我在我的makefile中使用了以下命令:

g++ -o binary -lahttplib -ltinyxpath [...]

ahttplib已经包含了旧版本的tinyxml。 因此,当链接tinyxpath时,它链接到已经包含在ahttplib中的tinyxml库,而不是它自己的版本。 来自ahttplib的tinyxml版本和来自tinyxpath的版本是不兼容的。

我的项目中的类的二进制文件,其中tinyxpath正常工作只包括tinyxpath,所以问题没有发生在那里。

简单的解决方案是更改链接顺序:ahttplib之前的tinxypath。 解决这个问题的正确方法是使ahttplib和tinyxpath引用相同的tinyxml库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM