Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用qt c+检查Xml中是否存在根元素+;_C++_Xml_Qt - Fatal编程技术网

C++ 使用qt c+检查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)

我有一个Xml文件:


问询处
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;
}