문제

다음 XML 문서가 있습니다.

<root>
    <options>
        ...
    </options>
    <children>
        <child name="first">12345</child>
        <child name="second">
            <additionalInfo>abcd</additionalInfo>
    </children>
</root>
.

"자식"노드의 문자열 표현을 얻고 배열에 추가하십시오 (XML 구문을 잃어 버리고 싶지 않으므로 .text ()는 옵션이 아닙니다). 예를 들어 첫 번째 자식은 다음과 같습니다.

QString child = "<child name="first">12345</child>";
.

필자는 다음 코드를 사용하여 요소를 가져옵니다.

QDomDocument doc;
QDomElement element;
element = xml->documentElement();
if(element.isNull() == false)
{
    element = element.firstChildElement("children");
    if(element.isNull()) return;

    element = element.firstChildElement("child");
    while(element.isNull() == false)
    {
        doc = element.toDocument();
        if(doc.isNull() == false)
        {
            // save string into array
            array.append(doc.toString());
        }
        element = element.nextSiblingElement("child");
    }
}
.

문제는 doc.isnull이 항상 false를 반환한다는 것입니다 (요소를 문서로 변환 할 수없는 것처럼 보입니다). 내가 이것을 어떻게 수행 할 수있는 방법이 있습니까?

편집 :

여기에 qstring이 필수가 아니라는 것을 추가하고 싶습니다. 기본적으로 나중에 데이터를 검색하는 데 사용될 수있는 모든 클래스는 괜찮습니다 (이 노드를 저장하고 나중에 다른 개체를 초기화하도록 사용하겠습니다). 중요한 것은 원래 문서가 파괴되었을 때에도 해당 값에 액세스 할 수 있어야한다는 것입니다. 예를 들어, 나중에 나중에 액세스하는 데 사용할 수있는 일부 배열 (예 : QList)에 해당 요소를 직접 저장하는 것이 가능합니다.

도움이 되었습니까?

다른 팁

XML 형식 자체가 필요하기 때문에 QDomElement 또는 QDomDocument가 필요하지 않습니다.QDomElementQDomDocument는 XML 문서에서 저장된 데이터를 얻는 을 얻는 데 사용됩니다.

일반적인 파일 이송이 필요합니다.

를 사용하여 파일을 엽니 다.
bool QFile::open ( OpenMode mode )   [virtual]
.

파일의 전체 내용을 읽을 수 있습니다.

QByteArray QIODevice::readAll ()
.

QString에 할당 할 수 있습니다.

e.g.,

QString entireContents = xmlFile->readAll();
.

다음

를 사용하여 newline \n 문자를 기반으로 전체 내용을 분리 할 수 있습니다
QStringList QString::split ( const QString & sep, SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
.

이제 각 인덱스는 XML 파일의 각 행에 해당합니다.당신은 그것을 통과하고 원하는 관심도를 얻을 수 있습니다.

도움이되기를 바랍니다 ...

Qt XML 클래스로 원하는 대단히 대단히 할 수는 없지만 직접 문자열을 단순히 재구성 할 수 있어야합니다 (아마 원래 100 %에서 원래 일치하지 않고 같은 의미로 원래 일치하지 않지만 같은 의미로).메소드 QT XML 클래스가 제공합니다.

편집 : 작은 코드 스 니펫 (테스트되지 않은) :

QString domElementToRawXML(const QDomElement& elem)
{
    QString head = "<"+elem.tagName();
    QDomNamedNodeMap attrs = elem.attributes();
    for(int i = 0; i<attrs.size(); ++i)
    {
        QDomAttr attr = attrs.item(i).toAttr();
        head += 
            QString::fromLatin1(" %0=\"%1\"")
            .arg(attr.name())
            .arg(attr.value());
    }
    head += ">";
    return head + elem.text() + "</"+elem.tagName()+">";
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top