Pues bien, si estamos trabajando con Qt e intentamos realizar una pequeña utilidad para analizar nuestro código HTML, una de las API con la que debemos trabajar sería la API xml y xmlpatterns, pero que sorpresa cuando al utilizar la clase QDomDocument, y se quiere acceder a un elemento por su ID, la documentación no muestra lo siguiente:
Returns the element whose ID is equal to elementId. If no element with the ID was found, this function returns a null element.
Since the QDomClasses do not know which attributes are element IDs, this function returns always a null element. This may change in a future version.
Devuelve el elemento cuyo ID es igual a elementId. Si no se encontró ningún elemento con el ID, esta función devuelve un elemento nulo.
Dado que las QDomClasses no saben qué atributos son identificadores de elementos, esta función devuelve siempre un elemento nulo. Esto puede cambiar en una versión futura.
http://doc.qt.io/qt-5/qdomdocument.html#elementById
Es decir, el método QDomDocument::getElementById ( const QString &elementId ), no está implementado, por esta razón, hoy traigo esta pequeña contribución que tenía mucho tiempo ya que había escrito para facilitar el acceso a elementos vía ID
QDomElement getElementById ( QString id ) {
QDomElement elementReturned;
QDomElement filesListNode = this->xmlDocument.firstChildElement ( "ETIQUETA_RAIZ" ).firstChild ().toElement ();
while ( !filesListNode.isNull () ) {
QDomNamedNodeMap attributes = filesListNode.attributes ();
if ( attributes.namedItem ( "id" ).nodeValue () == id ) {
elementReturned = filesListNode;
break;
}
filesListNode = filesListNode.nextSibling ().toElement ();
}
return elementReturned;
}
QDomElement filesListNode = this->xmlDocument.firstChildElement ( "ETIQUETA_RAIZ" ).firstChild ().toElement ();
QDomElement filesListNode = this->xmlDocument.documentElement ();
private:
QDomDocument xmlDocument;
QDomElement getElementById ( QDomDocument xmlDocument, QString id )