命名空间声明子句导致编译错误(Qt XQuery)

时间:2011-11-08 22:05:39

标签: c++ xml qt xpath xquery

我正在使用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'

2 个答案:

答案 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()");