删除嵌套xml中的节点将从QDomNodeList中删除节点,但是在保存文件时,没有更改



我有一个大xml文件,我需要从

中删除特定节点
QString filename= QFileDialog::getOpenFileName(this, "Choose File");
if(filename.isEmpty())
return;
QFile file(filename);
if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
return;
QDomDocument xmlBOM;
xmlBOM.setContent(&file);
QDomNodeList roots = xmlBOM.elementsByTagName("TEST_SCE");
for ( int i = 0; i < roots.count(); i++ )
{
QDomElement node = roots.at(i).toElement();
QDomNodeList noderoots = node.elementsByTagName("TEST_SET");
for ( int j = 0; j < noderoots.count(); j++ )
{
QDomElement node2 = noderoots.at(j).toElement();
QDomNodeList noderoots2 = node2.elementsByTagName("TEST");
int count = 0;
for ( int k = 0; k < noderoots2.count(); k++ )
{
QDomNode node3 = noderoots2.at(k);
unsigned int startFreq = Node3.toElement().firstChild().toElement().attribute("start","0").toUInt();
if (startFreq >= 20000000)
{
count++;
//delete this test element
node3.parentNode().removeChild(node3);
k--;
}
}
}   
}   
QByteArray xml = xmlBOM.toByteArray();   
file.write(xml);   
file.close();

,我检查了noderoots2计数,它当我删除子节点,然而当我保存文件,文件中没有改变。

下面是xml文件

的示例
<VERIFICATION Location="Here" Created="11h28 2021/07/15">
<TEST_SCE>
<TEST_SET>
<TEST>
<FREQUENCY_RANGE_Hz start="2000000" stop="19000000" step="1000000"/>
</TEST>
<TEST>
<FREQUENCY_RANGE_Hz start="20000000" stop="30000000" step="1000000"/>
</TEST>
<TEST>
<FREQUENCY_RANGE_Hz start="31900000" stop="54000000" step="1000000"/>
</TEST>            
</TEST_SET>
</TEST_SCE>
</VERIFICATION>

XML代码没有任何问题。错误与文件处理有关。

我将代码编辑如下:

  1. xmlBOM.setContent(&file);
  2. 之后关闭文件
  3. 保存更改时打开文件
if (!file.open(QIODevice::Truncate | QIODevice::WriteOnly)) {
return;
}
QByteArray xml = xmlBOM.toByteArray();
file.write(xml);
file.close();

相关内容

  • 没有找到相关文章

最新更新