私はQXMLStreamReader
とQXMLStreamWriter
を使用してファイルを読み書きしています。XMLファイルを変更するQXMLStreamReader/Writer
しかし、例えば、この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();
をもう1つ<LIGHT1>
を既存のxmlファイルに追加したいのですが、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
この[ポスト](https://stackoverflow.com/questions/11710598/reading-the-same-file-with-several-different-streams-in-qt)によれば、それが不可能です1つのデバイスに対して複数のストリームを持つ。 – piarston
whileループで入力ファイルをクローズしています –