【发布时间】:2017-08-22 09:55:46
【问题描述】:
我正在使用QXMLStreamReader 和QXMLStreamWriter 来读取和写入文件。
但我无法找到一种可以修改 XML 的方法,例如考虑这个 XML:
<?xml version="1.0"?>
<LAMPS>
<LIGHT1>
<State>statevalue</State>
<Room>roomvalue</Room>
<Potencial>potencialvalue</Potencial>
</LIGHT1>
</LAMPS>
这是使用以下代码编写的:
QFile file(filename);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("LAMPS");
xmlWriter.writeStartElement("LIGHT1");
xmlWriter.writeTextElement("State", "statevalue" );
xmlWriter.writeTextElement("Room", "roomvalue");
xmlWriter.writeTextElement("Potencial", "potencialvalue");
xmlWriter.writeEndElement();
xmlWriter.writeEndElement();
file.close();
现在我想在现有的 xml 文件中再添加一个 <LIGHT1>,那么如何在 QT 中做到这一点?
我正在做以下事情:
//filename = my file path
QFile file(filename);
file.open(QIODevice::ReadWrite);
QXmlStreamWriter xmlWriter(&file);
QXmlStreamReader xmlReader;
xmlReader.setDevice(&file);
xmlWriter.setAutoFormatting(true);
while(!xmlReader.atEnd()){
if(xmlReader.isStartDocument())
xmlWriter.writeStartDocument();
if(xmlReader.isStartElement()){
xmlWriter.writeStartElement(xmlReader.name().toString());
if(xmlReader.name()=="LAMPS"){
xmlWriter.writeStartElement("Arqam");
xmlWriter.writeTextElement("Arqam","Lucid Dreamer");
xmlWriter.writeEndElement();
}
}
if(xmlReader.isEndElement())
xmlWriter.writeEndElement();
if(xmlReader.isEndDocument())
xmlWriter.writeEndDocument();
xmlReader.readNext();
file.close();
我收到以下错误:
QIODevice::write (QFile, "/Users/arqam/Desktop/XMLGenrator/input/zzzz.xml"): device not open
QIODevice::read (QFile, "/Users/arqam/Desktop/XMLGenrator/input/zzzz.xml"): device not open
【问题讨论】:
-
根据post,单个设备不可能有多个流。
-
你在 while 循环中关闭了输入文件