QT - Разобрать XML с помощью html-ссылки на умляуты

Я надеюсь, что кто-нибудь может мне помочь.

Моя проблема в том, что я получаю XML с html-сущностями для специальных функций, таких как:

<person>
  <firstname>Max</firstname>
  <lastname>M&uuml;ller</lastname>
</person>
<person>
  <firstname>Bernd</firstname>
  <lastname>Sch&auml;fer</lastname>
</person>

Я не нахожу в QT способа декодировать "ü" в нормальное "ü". В QT-DomTree этот объект будет находиться в объекте QDomEntityRefrence, у которого нет функции получения или другой функции вывода или анализа. Я использую стандартный способ разбора дерева XML

QDomDocument doc;
if (!doc.setContent(response, &errors))
return false;

QDomElement const & root = doc.firstChildElement("person");
for (QDomElement xmlPerson= root.firstChildElement("person"); !xmlPerson.isNull(); xmlPerson = xmlPerson.nextSiblingElement("person"))
{
    QDomNodeList personCont = xmlPerson.childNodes();
    PersonObj person;

    for(int i = 0; i < personCont.count(); i++)
    {
        QDomNode itemNode = personCont.at(i);
        if(itemNode.isElement()){
            QDomElement item = itemNode.toElement();
            if(item.tagName() == "firstname")
            {
                person.setFirstname(item.firstChild().text());
            }
            else if(item.tagName() == "lastname")
            {
                addressBook.setLastname(item.firstChild().text());
            }
                ...

Результат:

Макс Мллер

Бернд Шфер

Спасибо за ваши большие поклонники

1 ответ

Использование QTextDocument()

QTextDocument doc;
doc.setHtml("Sch&auml;fer");
qDebug()<<doc.toPlainText();

В вашем примере

QTextDocument doc;

switch(item.tagName())
        {
        case "firstname":
            doc.setHtml(item.firstChild().text());
            person.setFirstname(doc.toPlainText());
            break;
        case "lastname":
            doc.setHtml(item.firstChild().text());
            addressBook.setLastname(doc.toPlainText());
            break;
            ...
Другие вопросы по тегам