Pregunta

Supongamos que tenemos el siguiente documento XML:

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

Me gustaría obtener una representación de cadena del "niño" nodos y anexar en una matriz (no quiero perder la sintaxis de XML así .texto() no es una opción).Por ejemplo, el primer hijo, se vería así:

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

He utilizado el siguiente código para obtener los elementos:

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

El problema es que el doc.isNull devuelve siempre falso (parece que soy incapaz de convertir el elemento en el documento).Es allí cualquier manera de cómo puedo realizar esto?

Editar:

Me gustaría añadir que QString no es obligatorio aquí.Básicamente cualquier clase que puede ser utilizado más tarde para recuperar los datos es aceptar (voy a guardar estos nodos y los utilizan para inicializar otro de los objetos más adelante).Lo importante es que yo debería ser capaz de acceder a esos valores, incluso cuando el documento original ha sido destruida.Por ejemplo, es posible almacenar los elementos directamente de la matriz (por ejemplo,QList), que puede ser utilizado para acceder a ellos más tarde.

Otros consejos

Ya que se necesita el formato XML en sí mismo no necesita QDomElement o QDomDocument. QDomElement y QDomDocument se utilizan para obtener los datos almacenados en los documentos XML.

Sólo se necesita un archivo ordinario del recorrido.

Abra el archivo con

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

Usted puede leer el contenido completo del archivo,

QByteArray QIODevice::readAll ()

la que se puede asignar a un QString.

Por ejemplo,

QString entireContents = xmlFile->readAll();

A continuación, se puede dividir el contenido completo basado en la newline \n personaje con

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

Ahora cada índice corresponde a cada línea en el archivo XML.Que se puede recorrer a través de ella y obtener la deseada líneas de interés.

Espero que ayude...

Puesto, creo que no puede hacer con Excactidad lo que desea con las clases de QT XML, pero debería ser posible reconstruir simplemente la cadena usted mismo (tal vez no coincidir con el original en 100%, pero con el mismo significado), según elMétodos Las clases QT XML proporcionan.

Editar: SNIPPET DE PEQUEÑO CÓDIGO QUE PODRÍA HACER LA COSA (NOTRADA):

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top