我正在使用Qt中的QXmlQuery
类在soap响应上执行XQuery。由于响应包含两个名称空间,我使用declare子句(下面的代码片段中的第二行和第三行)在Xpath表达式中使用它们之前先声明它们。
QXmlQuery查询;
声明命名空间s =“http://www.w3.org/2003/05/soap-envelope”;
声明命名空间ms = “http://schemas.microsoft.com/sharepoint/soap/”;
query.setQuery( “DOC($ xmlDoc中)/ S:信封/秒:身体/ MS:GetListCollectionResponse / MS:GetListCollectionResult / MS:列表/ MS:列表/串()”);
但是,编译代码时出现以下错误。有人知道如何解决这个问题吗?
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'
答案 0 :(得分:1)
“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);
答案 1 :(得分:-1)
看看this answer on how to declare namespaces。你尝试在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()");