我有一个大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代码没有任何问题。错误与文件处理有关。
我将代码编辑如下:
- 在
xmlBOM.setContent(&file);
之后关闭文件 - 保存更改时打开文件
if (!file.open(QIODevice::Truncate | QIODevice::WriteOnly)) {
return;
}
QByteArray xml = xmlBOM.toByteArray();
file.write(xml);
file.close();