10
votes

Conversion de QDomelement en classe QString / conteneur

Disons que nous avons le document XML suivant:

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


0 commentaires

3 Réponses :


0
votes

Depuis que vous avez besoin du format XML lui-même, vous n'avez pas besoin qdomelement ou qdomdocument . qdomelement et qdomdocument est utilisé pour obtenir les données stockées dans les documents XML.

Vous avez juste besoin d'une traversée de fichier ordinaire.

Ouvrez le fichier à l'aide de xxx

Vous pouvez lire tout le contenu du fichier par, xxx

que vous pouvez l'affecter à un qstring .

pour par exemple, xxx

Ensuite, vous pouvez diviser tout le contenu en fonction du document \ n en utilisant xxx

Maintenant, chaque index correspond à chaque ligne du fichier XML. Vous pouvez le traverser et obtenir les lignes d'intérêt souhaitées.

espère qu'il aide ...


1 commentaires

Ty pour la réponse. J'utilise ces classes QDom * parce que j'ai aussi besoin d'analyser / obtenir beaucoup de données avant l'opération discutée. C'est pourquoi je suis curieux si ceux-ci peuvent être faites via ces classes (ou toutes les classes QTXML). Je sais qu'il est possible d'analyser le document "à la main" et cela pourrait fonctionner avec un document simple. Cependant, dans ma situation, le document pourrait être très complexe et j'ai besoin d'opérations similaires dans plusieurs endroits. Fondamentalement tout ce que je sais, c'est qu'il devrait y avoir un nœud à certains niveaux de l'arbre XML et que j'ai besoin d'obtenir chaque branche.



0
votes

Eh bien, je pense que vous ne pouvez pas faire d'excédence ce que vous voulez avec les classes QT XML, mais il devrait être possible de simplement reconstruire la chaîne vous-même (peut-être ne correspondant pas à l'original à 100%, mais avec la même signification), basé sur le Méthodes Les classes QT XML fournissent.

EDIT: Petit petit code qui pourrait faire la chose (non testée): xxx


1 commentaires

Merci pour la réponse. Sur la base de ces réponses, il semble que je dois abandonner la stratégie de sauvegarder les nœuds (en tant que chaîne) et de déterminer quelque chose d'autre.



18
votes

Je vais ajouter une réponse à ma propre question. Aucune idée pourquoi, mais on dirait que j'ai manqué la fonction suivante dans la documentation.

Void QDomnode :: Save (Qtextstream & Str, intenter) Const

Il suffit à peu près que je dois convertir un nœud en une chaîne, par exemple: xxx


4 commentaires

Qu'en est-il de l'opération opposée? Compte tenu de la chaîne générer un QDomnode pouvant être ultérieurement ajouté à un QDomDocument existant?


@Pierluigi, qui devrait être une question en soi. C'est assez impliqué. Vous créez un qdomdocument , utilisez le setContent () , puis utilisez un qdomdocumentfragment pour copier le résultat dans un autre document ...


Commentaire / * = 4 * n'est pas fermé. Donc lorsque l'erreur de syntaxe.


Aucune idée Pourquoi, mais on dirait que j'ai manqué la fonction suivante probablement parce que personne n'attend que Enregistrer et nous recherchons généralement Serialize ou TobyReRay ...