2011-07-06 3 views
1

QT에서 XML 파일을 작성해야하지만 QT XML 클래스를 사용하여 XML 데이터를 만들지는 않지만 수동으로 XML을 포함하는 문자열을 작성하여 파일에 기록하는 이유는 다음과 같습니다. QT XML 클래스를 사용하지 않는 경우 속성의 순서를 유지해야하지만 QT XMl 클래스를 사용하면 임의 순서로 특성을 작성합니다.QString to QT

XML에서 태그 값으로 쓰여질 html 텍스트를 얻을 때까지 모든 것이 지금까지 문제가되지 않았습니다. 예 : "This is < Test data >"은 "This is & lt : Test data & gt"라고 쓰여야합니다. QM XMl 클래스에서 쓰는 HTML 데이터를 써야합니다. 여기 나는 ";" 이해를 돕기 위해 ":"를 사용합니다.

누구나 QString의 모든 기능을 사용하여 XMl을 감지하고 파일에 쓰거나 파일에 쓰는 동안 변환 할 수 있습니까?

+1

주 (http://www.w3.org/TR/xml/# sec-starttags) XML 처리기는 XML 컨텐트를 처리 할 때 순서를 유지해야합니다. * 수정 * (해결되지 않음)은 XML을 올바르게 읽는 것입니다. – larsmoa

+0

안녕하세요, 감사합니다, 속성의 순서는 중요하지 않지만 내 프로젝트에서 만드는 XML 파일은 QT에서 생성되지 않을 수도 있으므로 다른 프로젝트에서 사용되므로 속성 순서를 유지하도록 요청했습니다. 그래서 나는 어쨌든 그것을 지금해야한다. – maxchirag

+0

@maxchirag : QXmlStreamWriter를 사용해 보셨습니까? writeAttribute()를 호출 할 때 기본 I/O 장치에 직접 씁니다. 그러면 특성이 코드에 쓰는 순서대로 나타납니다. –

답변

0

문제는 QT XML 클래스의 동작 때문에 사용할 수 없다는 것이므로 프로젝트에서 QT XML 모듈을 사용하는 데 문제가 없다고 가정합니다. 유일한 방법은, 나는 코드의 유효성을 검사하고 유효한 XML (구문 만)으로 유효성을 검사하는 경우이를 감지 할 수 있다고 생각할 수 있습니다.

<TestData>Data1</TestData><TestData>Data2</TestData> 

하지만 구문 분석 오류 : 당신이 사이에 XML 조각을 처리 할 수 ​​있기 때문에

QString test = "<TestData>Valid XML</TestData>"; 
QString wrapper_start = "<?xml version=\"1.0\"?><dummyrootelement>"; 
QString wrapper_end = "</dummyrootelement>"; 
QDomDocument document; 
if(document.setContent(wrapper_start + test + wrapper_end)) { 
    // Valid XML, handle test here 
} else { 
    // Probably not valid XML 
} 

당신이 wrapper_start 및 wrapper_end 변수를 필요로하는 이유는 처리 할 필요가 XML로이 고려 될 수있다 이것은 XML 문서가 단일 루트 요소를 가져야하기 때문에 발생합니다.

또한 위의 방법은 권장하지 않지만 고통을 이해하고 기존 시스템을 유지 관리해야하는 사람을 공감하기 때문에 언급했습니다. 응용 프로그램이 특성의 순서에 의존하는 경우 최소한 응용 프로그램의 아키텍처를 수정하는 것이 좋습니다.

+0

Hello Rohan, 의견을 주셔서 감사합니다. 그러나 우선, 내 프로젝트에서 전체 XML을 사용하므로 원시 파일과 관련된 문제가 발생하지 않습니다. 내 도구가 출력으로 생성하는 XML 파일의 일부 문제 만 다른 도구. 이러한 도구 제한 때문에 우리는 수동으로 문자열을 사용하여 XML을 작성합니다. 그래서 나는 필자의 툴 작성 도구가 유효한 XML이고 속성의 순서를 유지하는지 확인해야한다. 당신이 제안한 것은이 문제를 발견하는 데 도움이 될 수 있지만 어떻게 실제로 해결합니까? – maxchirag

+0

문제가 감지되면 "유효한 XML, 여기 처리 테스트"섹션에 메모가 있으면 문자열이 전혀 수정되지 않았기 때문에 원하는대로 XML 문자열을 처리 할 수 ​​있습니다 속성 순서는 변경되지 않습니다. 유일한 것은 변수가 실제로 XML이라는 사실을 알게되었습니다. –

4

QXmlStreamReaderQXmlStreamWriter 클래스를 확인하십시오. QtCore에 있으며 XML 처리에 정말 유용합니다.

당신은 같은 것을 수행해야합니다 XML 사양은 [속성의 순서는 중요하지 않습니다] 것을 말한다

QString string; 
QXmlStreamWriter writer(&string); 
// use QXmlStreamWriter class to generate the XML 
writer.setAutoFormatting(true); 
writer.writeStartDocument(); 
... 
writer.writeStartElement("html"); 
writer.writeStartElement("a"); 
writer.writeAttribute("href", "http://example.com/"); 
writer.writeCharacters("My wonderful link"); 
writer.writeEndElement(); // a 
writer.writeEndElement(); // html 
... 
writer.writeEndDocument(); 
+0

oppss ... 죄송합니다. 프로젝트 이유로 인해 Qt 버전 4.1.4를 사용하고 있으며 Qt4.3 전에 QXmlStreamReader가 도입되지 않았다고 언급하는 것을 잊어 버렸습니다 .... 어쨌든 답장을 보내 주셔서 감사합니다. – maxchirag

+0

@maxchirag : 왜이 ​​정말로 오래된 라이브러리를 사용합니까? – Naszta