Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.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 5.11.3-QDomNode:can';dom元素的t打印值_C++_Xml_Qt_Qdomdocument - Fatal编程技术网

C++ QT 5.11.3-QDomNode:can';dom元素的t打印值

C++ QT 5.11.3-QDomNode:can';dom元素的t打印值,c++,xml,qt,qdomdocument,C++,Xml,Qt,Qdomdocument,我试图创建一个非常简单的函数来读取一个非常简单的XML文件,并在QTCreator控制台上打印其内容 我创建了以下XML文件: <SCANNERS> <SCANNER> <NAME>Test scanner</NAME> <SERIAL>10102030</SERIAL> </SCANNER> <SCANNER> <NAME

我试图创建一个非常简单的函数来读取一个非常简单的XML文件,并在QTCreator控制台上打印其内容

我创建了以下XML文件:

<SCANNERS>
    <SCANNER>
        <NAME>Test scanner</NAME>
        <SERIAL>10102030</SERIAL>
    </SCANNER>
    <SCANNER>
        <NAME>Test scanner 2</NAME>
        <SERIAL>10102031</SERIAL>
    </SCANNER>
    <SCANNER>
        <NAME>Test scanner 3</NAME>
        <SERIAL>10102032</SERIAL>
    </SCANNER>
    <SCANNER>
        <NAME>Test scanner 4</NAME>
        <SERIAL>10102033</SERIAL>
    </SCANNER>
    <SCANNER>
        <NAME>Test scanner 5</NAME>
        <SERIAL>10102034</SERIAL>
    </SCANNER>
</SCANNERS>

测试扫描仪
10102030
测试扫描仪2
10102031
测试扫描仪3
10102032
测试扫描仪4
10102033
测试扫描仪5
10102034
然后,我创建了以下函数,该函数应该打印每个“扫描仪”标记内的每个节点:

void printDomDocument(QString xml)
{
QDOM文档扫描仪;
QFile文件(xml);
如果(!file.open(QIODevice::ReadOnly))
{

std::cout找出了问题所在

实际上,实际的节点值似乎比子节点本身深一个节点

解决方案只是“挖”更深一层:

QDomNode n2 = e.firstChild();
std::cout << n2.nodeName().toStdString() << " " << n2.firstChild().nodeValue().toStdString() << std::endl;
n2 = n2.nextSibling();
std::cout << n2.nodeName().toStdString() << " " << n2.firstChild().nodeValue().toStdString() << std::endl;
QDomNode n2 = e.firstChild();
std::cout << n2.nodeName().toStdString() << " " << n2.firstChild().nodeValue().toStdString() << std::endl;
n2 = n2.nextSibling();
std::cout << n2.nodeName().toStdString() << " " << n2.firstChild().nodeValue().toStdString() << std::endl;
NAME Test scanner
SERIAL 10102030
NAME Test scanner 2
SERIAL 10102031
NAME Test scanner 3
SERIAL 10102032
NAME Test scanner 4
SERIAL 10102033
NAME Test scanner 5
SERIAL 10102034