- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我实现了一个例程 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 元素(即比较文本())?
特别是,我应该谨慎处理特殊情况,如 QDomCDATASection
元素和二进制格式吗?
如果 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/
我写了一个类来处理 XML 文件。该类在构建时加载文件,并在销毁时保存它。当类(class)处于事件状态时,我有几个 getter 和 setter 函数来更改值。其中之一是记录一些文件重命名的功能。
我想像这样创建QDomElement: class DomParser : public QObject { public: DomParser(); QDomDocument doc; QD
我正在用 XML 做一些事情,现在我很困惑。此代码完美运行: QDomElement new_item = doc.createElement(name); new_item.setA
我正在编写一个使用 GPX files 的应用程序我在使用 QDomElement 类读取大型 XML 文档时遇到了性能问题。包含数千个航路点的 GPS 路径文件可能需要半分钟才能加载。 这是我读取路
我需要编辑 QDomElement 的文本 - 例如 我有一个 XML 文件,其内容为 - Edit text here 如何编辑子元素的文本 ? 我在 Qt 4.7 中提供的 Q
我有 xmpp iq,我从 QByteArray 加载到 QDomDocument,但我需要它作为 QDomElement You need an x:data capable cli
我已经通过element.text()方法将QDomElement对象转换为QString,并以文本格式存储在mysql数据库中。我在从数据库中提取它时遇到问题,因为从数据库中提取它的格式为 QStr
我正在使用 qxmpp 编写一个小型 XMPP 服务器。现在我想创建一个 QXmppStanza 并使用 将它(就像客户端发送它一样)呈现给服务器和我的插件 void QXmppServer::han
我想写像这样的节点 Peter (带有开始和结束标记)到 QDomDocument 中。 当我创建 QDomElements 并将它们作为子元素附加到父元素时: QDomElement node =
我实现了一个例程 C++/Qt 来比较大多数一般情况下的 QDomElement。 bool XMLtools::compare( QDomElement & element1, QDomElemen
我已经包含了源代码、错误和堆栈跟踪。我该如何解决这个问题?我需要关于如何进行的指示(解释) 源代码: QFile xmlInputFile(".\\gatewayipmonitor.xml"); x
我是一名优秀的程序员,十分优秀!