QT - Разобрать XML с помощью html-ссылки на умляуты
Я надеюсь, что кто-нибудь может мне помочь.
Моя проблема в том, что я получаю XML с html-сущностями для специальных функций, таких как:
<person>
<firstname>Max</firstname>
<lastname>Müller</lastname>
</person>
<person>
<firstname>Bernd</firstname>
<lastname>Schä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ä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;
...