QT - 使用变音符号的html参考符号解析XML

时间:2015-07-14 08:12:25

标签: html xml qt special-characters qdomdocument

我希望有人可以帮助我。

我的问题是我使用html实体获取XML特殊字符,例如:

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

我发现QT无法将“&amp; uuml”解码为正常的“ü”。在QT-DomTree中,该实体将位于没有getter或其他输出或解析功能的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());
            }
                ...

结果:

Max Mller

Bernd Schfer

感谢你的greate awnsers

1 个答案:

答案 0 :(得分:-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;
            ...