gpt4 book ai didi

c++ - 通用的 XML QDomElement 比较 - C++/Qt

转载 作者:行者123 更新时间:2023-11-28 07:52:20 25 4
gpt4 key购买 nike

我实现了一个例程 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 元素(即比较文本())?

  1. 特别是,我应该谨慎处理特殊情况,如 QDomCDATASection 元素和二进制格式吗?

  2. 如果 QDomNode 包含二进制数据,如何比较它们,当内部数据相同时返回 true?

谢谢!

最佳答案

它与 Qt 方法 NodeValue() 一起工作,该方法将 QDomNode 的值转换为 QString 而不管其类型。我的比较函数如下:

bool XMLtools::compare( QDomElement & element1, QDomElement & element2 )
{
QString tag1 = element1.tagName() ; //attribute("Name") ;
QString tag2 = element2.tagName() ;

if ( tag1 != tag2 )
return false ;

QList<QDomElement> elts1 = getChildElements(element1);
QList<QDomElement> elts2 = getChildElements(element2);
QDomElement c1, c2 ;

bool these_nodes_are_equal = true ;
bool one_comparing_tag = false ;

QString name1, name2, value1, value2 ;

if(elts1.size() != elts2.size())
return false ;

if(elts1.size() == 0)
{
value1 = c1.nodeValue() ;
value2 = c2.nodeValue() ;

if( value1 != value2 )
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-- )
{
c2 = elts2.at(j) ;
name2 = c2.tagName() ;

if( name2 == name1 )
{
one_comparing_tag = true ;
if ( ! compare(c1, c2) ) // c1 and c2 are potential identical nodes
these_nodes_are_equal = false ;
else
{
these_nodes_are_equal = true ;
break ;
}
}
}

if( !one_comparing_tag ) // if no node in elts2 is corresponding to node in elts1
return false ;

if ( !these_nodes_are_equal ) // if no node in elts2 could compare to this node in elts1
return false;
}

return true ;
}

关于c++ - 通用的 XML QDomElement 比较 - C++/Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13516083/

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