2013-06-18 3 views
3

QXmlStreamWriter를 사용하여 XML 파일을 만든 다음 xml 문서를 닫기 전에 파일의 일부 요소를 매회 추가하려고합니다. QXmlStreamWriter를 사용하여 XML 파일에 요소를 삽입하는 방법

이 포럼에 게시하기 전에 나는이 두 가지 방법을 시도 : 나는 XML 파일의 값을 검색하고 싶었이 방법으로 1/

file.open(QFile:Append | QFile::Text); 
QXmlStreamWriter xmlWriter(&file); 
xmlWriter.setAutoFormatting(true); 
xmlWriter.setAutoFormattingIndent(2); 

xmlWriter.writeStartDocument(); 
xmlWriter.writeStartElement("Fiche_Du_Patient"); 
xmlWriter.writeStartElement("NUMERO_Patient"); 
xmlWriter.writeTextElement("Num_Patient", ui.lineEdit_numPtient- >text().toAscii()); 
xmlWriter.writeTextElement("Nom_et_prenom", ui.lineEdit_Nom->text().toAscii()); 
xmlWriter.writeTextElement("Date_de_naissance", ui.lineEdit_DOB->text().toAscii()); 
....... 
xmlWriter.writeEndElement(); 
xmlWriter.writeEndElement(); 
xmlWriter.writeEndDocument(); 

을, 프로그램은 첫 번째 문서의 값에 액세스 에러 표시 : 문서의 시작시 XML 선언하지를

번째 방법 : 나는 writeStartDocument()와 writeEndDocument()를 추가 할 때 제거 할 수 있지만이 오류가있어 : 예를 내가 다른 값

을 얻을 수 있도록 문서를 닫기 전에 문서

솔루션이 마지막에 추가됩니다의 끝에 TRA 콘텐츠

당신은 나에게 제발 도와 드릴까요!

답변

2

나는 단지 더러운 해킹 메모리에 전체 XML을 읽고 다시 쓰는 피할 수 있다고 생각 :

{ 
    QString path("/home/carlo/test/x.xml"); 
    QString ctag = "</Fiche_Du_Patient>\n"; 

    QFile file(path); 
    qint64 s = file.size(); 
    if (s > 0) { 
     file.open(QFile::ReadWrite); 
     if (file.seek(s - ctag.length())) 
      Q_ASSERT(file.pos() == s - ctag.length()); 

    } else 
     file.open(QFile::WriteOnly); 

    QXmlStreamWriter xmlWriter(&file); 
    xmlWriter.setAutoFormatting(true); 
    xmlWriter.setAutoFormattingIndent(2); 

    if (s == 0) { 
     xmlWriter.writeStartDocument(); 
     xmlWriter.writeStartElement("Fiche_Du_Patient"); 
    } 

    xmlWriter.writeStartElement("NUMERO_Patient"); 
    xmlWriter.writeTextElement("Num_Patient", "123"); 
    xmlWriter.writeTextElement("Nom_et_prenom", s > 0 ? "appending" : "creating"); 
    xmlWriter.writeTextElement("Date_de_naissance", s > 0 ? "more date" : "first date"); 
    xmlWriter.writeEndElement(); 

    if (s == 0) { 
     xmlWriter.writeEndElement(); 
     xmlWriter.writeEndDocument(); 
    } 
    else 
     QTextStream(&file) << ctag; 
} 

이 올바른 XML을 생성하는 것 같지만 형식의 출력은 최적의 (좋은 들여 쓰기가 손실되지 않습니다). 더 좋은 방법은 마지막 태그를 하드 코딩하지 않고 파싱합니다.

HTH

+0

실제 문제는 무엇인지 말해 줄 수 있습니까? 출력을 구문 분석해야하는 경우 문제가 발생합니까? – Angs

관련 문제