Frage

Nehmen wir an, wir haben das folgende XML-Dokument:

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

Ich möchte eine String-Darstellung der „untergeordneten“ Knoten erhalten und sie an ein Array anhängen (ich möchte die XML-Syntax nicht verlieren, daher ist .text() keine Option).Das erste Kind würde zum Beispiel so aussehen:

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

Ich habe den folgenden Code verwendet, um die Elemente abzurufen:

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");
    }
}

Das Problem ist, dass doc.isNull immer false zurückgibt (anscheinend kann ich das Element nicht in ein Dokument konvertieren).Gibt es eine Möglichkeit, wie ich das durchführen kann?

Bearbeiten:

Ich möchte hinzufügen, dass QString hier nicht obligatorisch ist.Grundsätzlich ist jede Klasse, die später zum Abrufen der Daten verwendet werden kann, in Ordnung (ich werde diese Knoten speichern und sie später zum Initialisieren anderer Objekte verwenden).Wichtig ist, dass ich auf diese Werte auch dann zugreifen kann, wenn das Originaldokument zerstört wurde. Beispielsweise ist es möglich, diese Elemente direkt in einem Array zu speichern (z. B.QList), mit der später darauf zugegriffen werden kann.

War es hilfreich?

Lösung

Ich werde auf meine eigene Frage eine Antwort hinzufügen.Keine Ahnung warum, aber sieht aus, als hätte ich die folgende Funktion in der Dokumentation verpasst.

void qdomnode :: speichern (qtextstream & str, int scent) const

Es ist so ziemlich alles, was ich brauche, um einen Knoten in eine Zeichenfolge umzuwandeln, z. B.:

generasacodicetagpre.

Andere Tipps

Da Sie das XML-Format selbst benötigen, benötigen Sie es nicht QDomElement oder QDomDocument. QDomElement Und QDomDocument werden verwendet um die gespeicherten Daten zu erhalten in den XML-Dokumenten.

Sie benötigen lediglich einen gewöhnlichen Dateidurchlauf.

Öffnen Sie die Datei mit

bool QFile::open ( OpenMode mode )   [virtual]

Sie können den gesamten Inhalt der Datei lesen, indem Sie:

QByteArray QIODevice::readAll ()

dem Sie es zuordnen können QString.

Für z.B.,

QString entireContents = xmlFile->readAll();

Dann können Sie den gesamten Inhalt basierend auf aufteilen Neue Zeile \n Charakter verwenden

QStringList QString::split ( const QString & sep, SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const

Jetzt entspricht jeder Index jeder Zeile in der XML-Datei.Sie können es durchqueren und die gewünschten Linien erhalten.

Ich hoffe es hilft...

Nun, ich denke, Sie können nicht extrem tun, was Sie mit den QT-XML-Klassen nicht möchten, aber es sollte einfach die Saite selbst rekonstruieren (vielleicht nicht mit dem Original in 100%, sondern mit derselben Bedeutung), basierend auf demMethoden Die Qt XML-Klassen stellen bereit.

edit: Kleiner Code-Snippet, der das Ding tun könnte (ungeprüft):

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top