2017-03-11 2 views
0

Ich versuche derzeit, XML-Dokumente zu parsen, weil QDomElement anscheinend ein Problem hat, den richtigen nodeType zu erkennen.QDomElement erkennt keinen richtigen KnotenTyp

Meine XML-Dokument hat th folgendem Inhalt:

<?xml version="1.0" encoding="UTF-8"?> 
<note> 
    <to>Tove</to> 
    <from> 
    <me>Jani</me> 
    </from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note> 

Der Code im Dokument zu lesen ist die folgende:

QFile xmlFile("note.xml"); 

if (!xmlFile.open(QIODevice::ReadOnly)) { 
    qDebug() << "error while opening file"; 
} 

QDomDocument xmlDoc; 
if (!xmlDoc.setContent(&xmlFile)) { 
    qDebug() << "error while setting xml content"; 
} 

QDomElement rootElement = xmlDoc.documentElement(); 
QDomElement firstLevel = rootElement.firstChildElement(); 

while (!firstLevel.isNull()) { 
    qDebug() << firstLevel.tagName() << firstLevel.text() << firstLevel.nodeType(); 
    firstLevel = firstLevel.nextSiblingElement(); 
} 

xmlFile.close(); 

Mein Problem ist, dass es auch nur Textelemente enthält, I erhalte immer QDomNode :: ElementNode beim Aufruf von firstLevel.nodeType(). Für das Parsen ist es jedoch wichtig, den richtigen nodeType zu kennen. Was muss ich tun, um den tatsächlichen Typ zu erhalten?

Regards, Frogtime

Antwort

0

The nodeType == QDomNode::NodeType wird nur auf den innersten Knoten gesetzt. Dies wird durch die DOM-Spezifikation erforderlich:

Der Text-Schnittstelle stellt den Textinhalt (als Zeichen Daten in XML) einem Elemente oder Attr. Wenn in einem Element des Elements kein Markup enthalten ist, ist der Text in einem einzelnen Objekt enthalten, das die Textschnittstelle implementiert, die das einzige untergeordnete Element des Elements ist. Wenn Markup vorhanden ist, wird es in eine Liste von Elementen und Textknoten geparst, die die Liste der untergeordneten Elemente des Elements bilden.

Um dies deutlich zu machen, an diesem leicht modifizierten Code aussehen:

while (!firstLevel.isNull()) { 
    qDebug() << firstLevel.tagName() << firstLevel.text() << firstLevel.nodeType(); 
    QDomNode firstNode = firstLevel.firstChild(); 
    qDebug() << "And the child has nodetype:" << firstNode.nodeType(); 
    firstLevel = firstLevel.nextSiblingElement(); 
} 
Verwandte Themen