2013-04-15 5 views
2

XML 내부에 XML 텍스트를 작성하려면 어떻게합니까?QXmlStreamWriter를 사용하여 XML 코드 작성

QXmlStreamWriter xmlWriter(&file); 
(...) 
QString xmlCode = "This is a <b>XML</b> code. And should be written as is it"; 
xmlWriter.writeStartElement("start"); 
xmlWriter.writeCharacters(xmlCode); 
xmlWriter.writeEndElement(); 

출력해야한다 : '당신은 QXmlStreamWriter 따옴표와 앰퍼샌드,보다 작음 탈출하는 것입니다 수없고 원 텍스트를 작성하기위한 메커니즘을 제공하지 않습니다

<start> 
    This is a <b>XML</b> code. And should be written as is it 
</start> 

답변

-1

탈출하지 마라. 두 가지 옵션이 있습니다. 하나는 가능한 경우 xmlCode를 작성하는 것입니다 (다른 소스에서 전달 되었기 때문에 그렇지 않으면 옵션 2로 읽음).

QString xmlCode1 = "This is a "; 
QString xmlCode2 = "XML"; 
QString xmlCode3 = " code. And should be written as is it"; 
xmlWriter.writeStartElement("start"); 
xmlWriter.writeCharacters(xmlCode1); 
xmlWriter.writeStartElement("b"); 
xmlWriter.writeCharacters(xmlCode2); 
xmlWriter.writeEndElement(); 
xmlWriter.writeCharacters(xmlCode3); 
xmlWriter.writeEndElement(); 

두 번째 옵션QXmlStreamWriter를 서브 클래스 직접 QIODevice에 기입하는 방법을 추가하여 동작을 직접 추가하는 것입니다. 누군가가 비슷한 질문을했지만 또 다른 질문은 not-escaping quotes입니다. 내가 연결 한 대답은 less-than (또는 greater-than)를 벗어나지 않도록 쉽게 수정할 수있는 것처럼 보입니다.

+0

, 서브 클래스 아래의 간단한 변형을 볼 필요가 없습니다. 첫 번째 변형은 몇 가지 HTML 태그가있는 예를 들어 모든 xmlCode 콘텐츠에 대해 자동화 될 수 없습니다. –

2

예, 할 수 있습니다! :) 내가 사용하는 변형은 잘 작동합니다 :

QXmlStreamWriter xmlWriter(&file); 
xmlWriter.writeStartElement("start"); 
xmlWriter.writeCharacters(""); // This will open and close <start> tag correctly 
xmlWriter.device()->write(xmlCode.toLatin1().constData(), xmlCode.length()); 
xmlWriter.writeEndElement(); 

또한 여기에 제안했다 : http://www.qtcentre.org/threads/60045-writing-raw-data-into-xml-sub-node

+0

xmlCode의 일부를 이스케이프해야하는 경우 에서 Qt :: escape()를 사용할 수 있습니다. –

+1

xmlWriter.device() -> write (xmlCode.toUtf8(). constData())를 호출하여 xmlWriter.device() -> write (xmlCode.toLatin1(), constData, xmlCode.length , xmlCode.toUtf8(). length());'비 ASCII 문자를 "?"로 변환하지 못하도록합니다. 표지판. –