假设我们有以下XML文档:
<root>
<options>
...
</options>
<children>
<child name="first">12345</child>
<child name="second">
<additionalInfo>abcd</additionalInfo>
</children>
</root>
Run Code Online (Sandbox Code Playgroud)
我想获得"子"节点的字符串表示并将它们附加到数组中(我不想丢失XML语法,所以.text()不是一个选项).例如,第一个孩子看起来像:
QString child = "<child name="first">12345</child>";
Run Code Online (Sandbox Code Playgroud)
我使用以下代码来获取元素:
QDomDocument doc;
QDomElement element;
element = xml->documentElement();
if(element.isNull() == false)
{
element = element.firstChildElement("children");
if(element.isNull()) return;
element = element.firstChildElement("child");
while(element.isNull() == false)
{
doc = element.toDocument();
if(doc.isNull() == false)
{
// save string into array
array.append(doc.toString());
}
element = element.nextSiblingElement("child");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是doc.isNull总是返回false(看起来我无法将元素转换为文档).有什么方法可以执行此操作吗?
编辑:
我想补充说QString在这里不是强制性的.基本上任何可以在以后用于检索数据的类都可以(我将保存这些节点并使用它们稍后初始化其他对象).重要的是,即使原始文档被销毁,我也应该能够访问这些值.例如,可以将这些元素直接存储到某个数组(例如QList),以后可以用它来访问它们.
我正在使用以下代码与服务器发出HTTPS请求.
QNetworkRequest request;
//request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
request.setUrl(QUrl("https://www.someurl.com/"));
QNetworkReply *reply = manager->get(request);
Run Code Online (Sandbox Code Playgroud)
一切似乎与我的测试服务器上的工作,但我想知道如果要推荐它来设置defaultConfiguration(取消注释第二行)或没有网络API使用SSL时自动检查所有defaultConfigurations?如果它检查,如果我添加一个自定义配置,它也会这样做吗?我的意思是,是否需要将自定义配置附加到默认配置列表中?例如:
QSslConfiguration SslConfiguration(QSslConfiguration::defaultConfiguration());
QList<QSslCertificate> certificates = SslConfiguration.caCertificates();
certificates.append(QSslCertificate::fromData(certificate.toAscii(), QSsl::Pem));
SslConfiguration.setCaCertificates(certificates);
request.setSslConfiguration(SslConfiguration);
Run Code Online (Sandbox Code Playgroud)
编辑:我想补充一点,我正在使用Symbian平台.
我需要将类的指针(从QObject继承)插入到QList中.我知道可以使用以下语法:
.H
QList<MyObject*> list;
Run Code Online (Sandbox Code Playgroud)
的.cpp
list.append(new MyObject("first", 1));
list.append(new MyObject("second", 2));
...
Run Code Online (Sandbox Code Playgroud)
然后释放内存:
if(!list.isEmpty())
{
qDeleteAll(list);
list.clear();
}
Run Code Online (Sandbox Code Playgroud)
这应该是有效的,不会导致任何内存泄漏(据我所知).但是,我需要在将对象添加到集合之前初始化对象.以下代码段是否会导致内存泄漏或悬空指针等错误(我将使用相同的方法删除上面的指针)?
MyObject *obj;
for(i = 0; i < 5; i++)
{
obj = new MyObject();
if(!obj.Init(i, map.values(i)))
{
// handle error
}
else
{
list.append(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.