首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用xquery动态创建xml文档?

如何使用xquery动态创建xml文档?
EN

Stack Overflow用户
提问于 2009-05-04 10:07:42
回答 1查看 2.6K关注 0票数 0

我知道如何使用XQuery将"aaa=1&bbb=2“之类的字符串转换为xml

代码语言:javascript
运行
复制
<request>
  <aaa>1</aaa>
  <bbb>2</bbb>
</request>

我已经尝试了以下代码,但失败了!

代码语言:javascript
运行
复制
xquery version "1.0" encoding "GBK";
(:: pragma  type="xs:anyType" ::)

declare namespace xf = "http://tempuri.org/BNetAP/Xquery/query2xml/";

declare function xf:query2xml($queryStr as xs:string)
    as element(*) {
    <query-params>
    {
        for $c in
            fn:tokenize($queryStr, "&amp;")
        let $myname as xs:string := "{fn:substring-before($c,"=")}"
        return 
            element
                {fn:QName("", $myname)}
                {"{fn:substring-after($c,"=")}"}
    }
    </query-params>
};

错误消息为:

代码语言:javascript
运行
复制
line 15, column 6:  "{http://www.w3.org/2004/07/xpath-functions}QName": unknown function (or number of arguments (2) is wrong)  BNetAP/Xquery   query2xml.xq    line 15 1241431186406   397

我不知道为什么"QName“是一个”未知函数“?!

EN

回答 1

Stack Overflow用户

发布于 2009-05-06 17:06:46

您应该使用构造函数xs:QName,而不是fn:QName。

您构造的元素的主体看起来也有点可疑:

代码语言:javascript
运行
复制
"{fn:substring-after($c,"=")}"

实际上是字符串"{fn:substring-after($c,“和字符串")}”之间的比较,因此元素的内容就是文本"false“。

类似地,您的$myname变量实际上被设置为false,因此将在运行时引发类型检查错误。

您的函数可能如下所示:

代码语言:javascript
运行
复制
declare function xf:query2xml($queryStr as xs:string)
    as element(*) {
  <query-params>
  {
    for $c in fn:tokenize($queryStr, "&amp;")
    let $myname := fn:substring-before($c,"=")
    return 
      element
        {xs:QName("", $myname)}
        {fn:substring-after($c,"=")}
  }
  </query-params>
};

计算元素构造函数也可以只接受字符串作为其名称,因此您的返回表达式可以简化为

代码语言:javascript
运行
复制
return element {$myname} {fn:substring-after($c,"=")}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/819545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档