Объявление пространства имен, приводящее к ошибке компиляции (Qt XQuery) - PullRequest
0 голосов
/ 09 ноября 2011

Я использую класс QXmlQuery в Qt, чтобы сделать XQuery для ответа мыла.Так как ответ содержит два пространства имен, я использую условия объявления (вторая и третья строки в фрагменте кода ниже), чтобы сначала объявить их перед использованием в выражении Xpath.

QXmlQuery query;

объявить пространство имен s = "http://www.w3.org/2003/05/soap-envelope";

объявить пространство имен ms =" http://schemas.microsoft.com/sharepoint/soap/";

query.setQuery ("doc ($ xmlDoc) / s: конверт / s: тело / ms: GetListCollectionResponse /ms: GetListCollectionResult / ms: Lists / ms: List / string () ");

Однако при компиляции кода я получил следующие ошибки.Кто-нибудь знает, как это исправить?

src/QtHelloWorldMakeCommImpl.cpp:79: error: 'declare' was not declared in this scope
src/QtHelloWorldMakeCommImpl.cpp:79: error: expected ';' before 'namespace'
src/QtHelloWorldMakeCommImpl.cpp:80: error: expected ';' before 'namespace'

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Оператор "Declare" является оператором XQuery, но вы используете его непосредственно в файле C ++ - это не может работать.У меня нет установленной Qt, но следующее должно работать

QString queryStr(
"declare namespace s = \"http://www.w3.org/2003/05/soap-envelope\";\n"
"declare namespace ms = \"http://schemas.microsoft.com/sharepoint/soap/\";\n"
"doc($xmlDoc)/s:Envelope/s:Body/ms:GetListCollectionResponse/ms:GetListCollectionResult/ms:Lists/ms:List/string()");

query.setQuery(queryStr);
0 голосов
/ 09 ноября 2011

Посмотрите на этот ответ о том, как объявлять пространства имен .Вы пытаетесь объявить это в C ++ - Код, где declare не является соседом по ключевым словам, вы объявили его.

Это должно работать:

query.setQuery("declare namespace s = \"http://www.w3.org/2003/05/soap-envelope\"; declare namespace ms = \"http://schemas.microsoft.com/sharepoint/soap/\"; doc($xmlDoc)/s:Envelope/s:Body/ms:GetListCollectionResponse/ms:GetListCollectionResult/ms:Lists/ms:List/string()");
...