抱歉给你带来了困惑,QDomNode
确实没有直接的 text()
方法。你需要首先将其转换为 QDomElement
,然后再调用 text()
方法。以下是修正后的代码示例:
#include <QCoreApplication>
#include <QFile>
#include <QDomDocument>
#include <QString>
#include <QDebug>
void parseXml(const QString &xmlContent) {
QDomDocument document;
// 设置XML内容
if (!document.setContent(xmlContent)) {
qDebug() << "Failed to parse XML.";
return;
}
// 获取根元素
QDomElement root = document.documentElement();
// 打印根元素名称(可选)
qDebug() << "Root element:" << root.tagName();
// 查找 CmdType 和 SN 元素(可选)
QDomNodeList cmdTypeList = root.elementsByTagName("CmdType");
QDomNodeList snList = root.elementsByTagName("SN");
if (!cmdTypeList.isEmpty()) {
QString cmdType = cmdTypeList.at(0).toElement().text();
qDebug() << "CmdType:" << cmdType;
}
if (!snList.isEmpty()) {
QString sn = snList.at(0).toElement().text();
qDebug() << "SN:" << sn;
}
// 处理 Item 元素
QDomNodeList itemList = root.elementsByTagName("Item");
for (int i = 0; i < itemList.size(); ++i) {
QDomElement itemElement = itemList.at(i).toElement();
// 使用 toElement 来获取 Id 节点并读取文本
QDomNode idNode = itemElement.firstChildElement("Id");
if (!idNode.isNull()) {
QString id = idNode.toElement().text(); // 修正:将 idNode 转换为 QDomElement
qDebug() << "Item Id:" << id;
}
}
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QString xmlData =
"<?xml version=\"1.0\" encoding=\"GB2312\" standalone=\"yes\"?>"
"<Notify>"
"<CmdType>HotWordUpdate</CmdType>"
"<SN>5</SN>"
"<Item>"
"<Id>1</Id>"
"</Item>"
"<Item>"
"<Id>2</Id>"
"</Item>"
"<Item>"
"<Id>3</Id>"
"</Item>"
"<Item>"
"<Id>4</Id>"
"</Item>"
"</Notify>";
parseXml(xmlData);
return a.exec();
}
更改说明:
- 在处理每个
Item
时,将idNode
转换为QDomElement
以便调用其text()
方法。原来的错误是在尝试在QDomNode
上直接使用了不存在的方法。
这样,你就可以正确地提取 XML 中各个元素的文本内容了。如果有其他问题,请随时告诉我!
内容由零声教学AI助手提供,问题来源于学员提问