我正在尝试使用 QXmlQuery 解析 Mac 应用程序的“Info.plist”以检索版本号。这是 Info.plist 上的一个示例:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>13A598</string>
<key>CFBundleShortVersionString</key>
<string>1.4</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.4</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
目的是使用“CFBundleShortVersionString”键获得“1.4”值。为此,我使用以下查询:
/plist/dict/key[node()='CFBundleShortVersionString']/following-sibling::string[1]/node()
它完美地工作。
现在,当我将其转换为 Qt 时,我使用以下代码:
QString version;
QString fileName = appPath + "/Contents/Info.plist";
QFile file(fileName);
if (file.open(QIODevice::ReadOnly)) {
QXmlQuery query;
query.bindVariable("file", &file);
query.setQuery("declare variable $file external; doc($file)/plist/dict/key[node()='CFBundleShortVersionString']/following-sibling::string[1]/node()");
query.evaluateTo(&version);
}
return version;
它一直很好,直到“query.evaluateTo”卡住了一段时间,然后在“版本”中给了我一个空值。
有人可以帮忙吗?