0

我目前有以下类型的响应:

<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><StartBuisnessResponse xmlns=\"http://test.com/kerosene/mytest/\"><StartBuisnessResult><Commodity><_price>45</_price></Commodity><Commodity><_price>36</_price></Commodity></StartBuisnessResult></StartBuisnessResponse></soap:Body></soap:Envelope>

在这里,节点是动态的。在这种情况下,我无法找到使用 QtSoap 解析响应 SOAP XML 的方法。

这是用于获取第一个商品的代码:

QString str("<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><StartBuisnessResponse xmlns=\"http://cg.nic.in/kerosene/finotest/\"><StartBuisnessResult><Commodity><_price>45</_price></Commodity><Commodity><_price>36</_price></Commodity></StartBuisnessResult></StartBuisnessResponse></soap:Body></soap:Envelope>");

    QByteArray *arr = new QByteArray();
    arr->append(str);

    QtSoapMessage *testMsg = new QtSoapMessage();
    testMsg->setContent(*arr);

    const QtSoapType &testCont = testMsg->returnValue();
    const QtSoapType &price = testCont["Commodity"];

    qDebug() << "The value of the _price here is " << price["_price"].value().toString();

但是在这种情况下如何遍历后续节点呢?任何想法?

4

1 回答 1

1

如果您遵循他们为 Google 提供的 Qt 解决方案上显示的示例QtSoap,您应该正在使用它。

http://doc.qt.digia.com/solutions/4/qtsoap/index.html

http://doc.qt.digia.com/solutions/4/qtsoap/google-example.html

如果您不想尝试,另一种方法是使用 QXmlStreamReader:

http://qt-project.org/doc/qt-4.8/qxmlstreamreader.html#details

这是一些快速代码,可以从中获取_price信息:

// add "QT += xml" to your .pro

#include <QXmlStreamReader>
#include <QDebug>

QXmlStreamReader xml(str);

while (!xml.atEnd())
{
    if (xml.readNextStartElement())
        qDebug() << qPrintable(xml.name().toString());
    if(xml.name().toString() == "_price")
    {
        qDebug() << "\t" << xml.readElementText().toInt();
    }
}

您还可以使用许多其他替代方案。请参阅Qt XML 处理

希望有帮助。

于 2013-04-23T06:25:01.403 回答