C++ 使用qt c+检查Xml中是否存在根元素+;
我有一个Xml文件:C++ 使用qt c+检查Xml中是否存在根元素+;,c++,xml,qt,C++,Xml,Qt,我有一个Xml文件: 问询处 wia 假的 0 假的 一对一 0 0 C24Bit 左边 书信 Dpi100 玻璃 我需要用Qt C++来检查XML中是否存在根元素“AutoSaveSeTeNeTeP”。如果根元素存在,则在自动保存设置之前和之后删除注释行?如何在QtC++中进行。如何在C++中执行此操作。检查是否存在起始元素或根元素< /p> #包括 #包括 #包括 #包括 #包括 bool elementExists(常量QFile和file、常量QString和elementName)
问询处
wia
假的
0
假的
一对一
0
0
C24Bit
左边
书信
Dpi100
玻璃
我需要用Qt C++来检查XML中是否存在根元素“AutoSaveSeTeNeTeP”。如果根元素存在,则在自动保存设置之前和之后删除注释行?如何在QtC++中进行。如何在C++中执行此操作。检查是否存在起始元素或根元素< /p>
#包括
#包括
#包括
#包括
#包括
bool elementExists(常量QFile和file、常量QString和elementName)
{
QXmlStreamReader读取器(文件(&F);
while(reader.readNextStartElement())
{
if(reader.name()==elementName)
{
返回true;
}
}
返回false;
}
int main(int argc,char*argv[])
{
qcorea应用程序(argc、argv);
QDOM文件;
QFile file=“C:/Program Files(x86)/NAPS2/appsettings.xml”;
如果(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug()尝试以下方法:
bool elementExists( QFile & file, const QString & elementName){
QXmlStreamReader reader (&file);
while (reader.readNextStartElement()){
if(reader.name() == elementName) return true;
//elementName should be "AutoSaveSettings"
}
return false;
}
编辑:另一种方法是使用QDomDocument
不重新命名,因为QDomDocument不再处于活动维护状态
bool elementExists( QFile & file,const QString & elementName){
QDomDocument reader;
reader.setContent(&file, true);
QDomNodeList elementList = reader.elementsByTagName(elementName);
return elementList.size()>0;
}
您是否尝试过使用QXmlStreamReader?因为我可以看到有一个方法bool isComment()const;很抱歉,我不会将代码作为答案,因为我不确定QXmlStreamReader是否可以工作。您可以先在文档中看到一个示例,我需要了解“AutoSaveSettings”是否可用存在?如何做可能更容易使用。基本思想:枚举每个子节点,检查它是否为QDomComment
,使用QDomComment::data()
获取注释字符串。使用将字符串转换为QDomElement
,并在文档中的适当位置插入新元素。首先,我需要确定是否为“AutoSaveSettings”-您必须枚举所有节点并检查它是否为注释节点,然后比较字符串内容。注释只是字符串,您无法直接找到它。我发布了一些代码。告诉我它是否工作这不工作会产生错误无法将Qfile转换为QIOdevicestrange!您是否包含Qfile?在第二种方法中,它会产生无法从中转换的错误Qfile to Qbyteerrorok我忘了在setContent中添加第二个参数,它是bool,这就是为什么在新代码中不应该使用QDomDocument
:“模块不再进行有效维护。请改用Qt Core中的QXmlStreamReader和QXmlStreamWriter类。”
bool elementExists( QFile & file, const QString & elementName){
QXmlStreamReader reader (&file);
while (reader.readNextStartElement()){
if(reader.name() == elementName) return true;
//elementName should be "AutoSaveSettings"
}
return false;
}
bool elementExists( QFile & file,const QString & elementName){
QDomDocument reader;
reader.setContent(&file, true);
QDomNodeList elementList = reader.elementsByTagName(elementName);
return elementList.size()>0;
}