【发布时间】:2012-11-22 15:42:58
【问题描述】:
我实现了一个例程 C++/Qt 来比较大多数情况下的 QDomElement。
bool XMLtools::compare( QDomElement & element1, QDomElement & element2 )
{
QString tag1 = element1.tagName() ;
QString tag2 = element2.tagName() ;
if ( tag1 != tag2 )
return false ;
QList<QDomElement> elts1 = getChildElements(element1);
QList<QDomElement> elts2 = getChildElements(element2);
QDomElement c1, c2, tmp ;
QString name1, name_tmp, text1, text2 ;
if(elts1.size() != elts2.size())
return false ;
if(elts1.size() == 0)
{
text1 = c1.text() ;
text2 = c2.text() ;
if( text1 != text2 )
return false ;
}
for ( int i = elts1.size() - 1 ; i > -1 ; i-- )
{
c1 = elts1.at(i);
QString name1 = c1.tagName();
for( int j = elts2.size() - 1 ; j > -1 ; j-- )
{
tmp = elts2.at(j) ;
name_tmp = tmp.tagName() ;
if( name_tmp == name1 )
{
c2 = tmp ;
break ;
}
if( j == 0 )
return false ;
}
if ( ! compare(c1, c2) )
return false ;
}
return true ;
}
1。是否可以使用此方法比较所有 QDomNode 元素(即比较 text())?
特别是,我应该谨慎对待特殊情况,如
QDomCDATASection元素和二进制格式?如果
QDomNode包含二进制数据,如何比较它们,当内部数据相同时返回true?
谢谢!
【问题讨论】:
-
即使是相当 comles xml 与自身的比较也会因您的代码而失败。考虑让 2 个元素具有相同的标签和不同的内容:
xml: <a>x</a><a>y</a>; xml2: <a>y</a><a>x</a> -
@Lol4t0 回答工作人员