Xquery编辑中字符串的拼接

学OSB以来,对于消息管道中的Xquery的使用一直停留在能看懂但是不会写的程度,导致这种现象的原因就是我一直搞不明白这种在Xquery中的字符串的拼接规则。最近终于花了点时间,把这个问题搞懂的。写这篇文档主要是因为想要对这点做一个总结和归纳,同时也希望可以帮到其他人。

一、Xquery实例

现在我们想从XML文档中的body中提取一些数据,并把它以json的形式输出。定义变量expression以json格式输出,格式如下:

{

"expression": "Program"

}

首先,我们来看看这个json,这个json主要由花括号“{}”、、双引号“”””、冒号“:”组成。在Xquery中拼接字符串要用到函数fn:concat(),如fn:concat(xxx)中的xxx就是需要拼接的内容。定义变量expression的输出格式,写作fn:concat($expression,”xxx”)。在Xquery中的fn:concat()函数的拼接规则为:花括号“{}”、大括号”[]、“和冒号“:”是直接写的,单个双引号“””写作:“$quot;”,被双引号引起来的“”xxx””写作“$quot;xxx$quot;”。如果Praogram是从变量$ep中提取的值,那么写作$ep/text()。那么上面的json应该写作:

fn:concat($expression,”{

$quot;expression$quot;:quot;$ep/text()quot;

}”)

好像没问题,但是真的是这样的么?当然不是了!!!!

首先,每个拼接对象都应用”,xxxx,”围起来,其中,如果是纯字符串或者从body中提取的值组成,应该用应该用双引号内再用两个逗号包围起来,“”,”xxx”,””,如果是从body中提取的值,字符串的拼接少最里面的一对双引号,写作”,xxxx,”。

字符串加变量值如下:

fn:concat($expression,”{

“,“$quot;expression$quot;:quot;”,$ep/text(),”quot;”,“

}”)

字符串加字符串(即变量写死的情况)如下:

fn:concat($expression,”{

“,“$quot;expression$quot;:quot;”,”Program”,”quot;”,“

}”)

这样写不好看,也不规范,通常写成:

fn:concat($expression,”{“,

“$quot;expression$quot;:quot;”,$ep/text(),”quot;”,

“}”)

这样看起来就舒服多了。

现在来一个实例练习一下,json如下:

{

"expression": [

{

"expression"

}

],

"programName": "AAA",

"vehicleid": "G1443",

"accountid": "243232",

"languagecode": "zh-CN"

}

以上大括号内为变量$expression。

首先,我们来分析一下上面的json。花括号内一个整的拼接对象代指A,A内有4个json对象B1、B2、B3、B4、B5,其中B1的值包含了一个大括号C11,大括号C11内是变量$expression。其他B中的key为文本,值为从body中提取的值。

我们从外面开始写,注意括号和双引号的成对出现,先写花括号和里面的四个对象以及对象内的双引号、冒号和逗号:

fn:concat("{",

"$quot;$quot;:,",

"$quot;$quot;:$quot;$quot;,",

"$quot;$quot;:$quot;$quot;,",

"$quot;$quot;:$quot;$quot;,",

"$quot;$quot;:$quot;$quot;",

"}")

再来写以json对象B,其中B1中的值包含了一对大括号,大括号内是变量,B2等其他B的值为从文本中提取出来的值,其中B5中的值为一个属性值用@属性名称表示:

fn:concat("{",

"$quot;expression$quot;:[",$expression,"],",

"$quot;programName$quot;:$quot;","TFN_ALERTS","$quot;,",

"$quot;vehicleid$quot;:$quot;",$body//n1:VehicleID/text(),"$quot;,",

"$quot;accountid$quot;:$quot;",$body//n1:AccountID/text(),"$quot;,",

"$quot;languagecode$quot;:$quot;",$body/urn:GetOnStarProgram/@languageCode,"$quot;",

"}")

如果觉得这样看不习惯,我们可以稍稍规范一下:

fn:concat("{",

"$quot;expression$quot;:[",

$expression,

"],",

"$quot;programName$quot;:$quot;","NOTFN_ALERTS","$quot;,",

"$quot;vehicleid$quot;:$quot;",$body//n1:VehicleID/text(),"$quot;,",

"$quot;accountid$quot;:$quot;",$body//n1:AccountID/text(),"$quot;,",

"$quot;languagecode$quot;:$quot;",$body/urn:GetOnStarProgram/@languageCode,"$quot;",

"}")

这样我们就从xml文档中body中提取了我们需要的数据并以规定的json输出了,这就是数据转换transform了。

另外别忘了在编辑器的左边添加你所用到了命名空间哦!完美!

Xquery编辑中字符串的拼接相关推荐

  1. android——databinding中字符串的拼接处理、TextView显示的值随activity的属性值改变同时改变--LiveData、双向绑定过滤器、监听某个值的改变

    简介 使用的技术是观察者与被观察者的模式,在google推荐的案例中也有使用到,现在我把它封装成一个扩展函数,使得使用更加简单明了 注意 1.在build.gradle添加databinding,在a ...

  2. JavaScript中字符串连接/拼接的四种方式

    JavaScript中连接字符串的方式有4种,分别是使用加号运算符连接.使用${}配合反引号连接.使用concat()函数连接.使用join()函数连接. 1. 使用加号运算符 示例代码如下: let ...

  3. sqlite插入记录值为纯数字的字符串的问题以及sqlite语句中字符串的拼接

    当向sqlite数据库中插入某条记录,而这条记录中的某个字段为纯数字的字符串时,在这条记录插入到数据库中时,这个字段的值就有一定几率会被转成数字Y_Y!! 例如下面的代码: String phone ...

  4. adnroid string拼接_Android开发中string.xml文件中字符串的拼接

    第一种方法: 在string.xml中进行操作 MyStringDemo 我今年%1d岁了,上%s年级! 我今年%1$3d岁了,上%2$9s年级! 在代码中使用的地方只需要调用String类的form ...

  5. php中怎么拼接,php中字符串的拼接用法详解

    首先和大家说下,学习任何一门语言都要去官网去看文档,因为官方的文档正确性有保证,并且也最有广泛性. 有两个字符串(string)运算符.第一个是连接运算符("."),它返回其左右参 ...

  6. Oracle和Mysql中的字符串的拼接

    SQL允许两个或者多个字段之间进行计算,字符串类型的字段也不例外.比如我们需要 以"工号+姓名"的方式在报表中显示一个员工的信息,那么就需要把工号和姓名两个字符 串类型的字段拼接计 ...

  7. MySql、Oracle、MSSQL中的字符串的拼接

    字符串的拼接 1,Mysql 在Java.C#等编程语言中字符串的拼接可以通过加号"+"来实现,比如:"1"+"3"."a&quo ...

  8. C/C++中字符串拼接的使用详解

    C/C++中针对字符串函数的使用过程中,需要格外注意字符串终止符'\0'.字符串结尾处默认带'\0'. 带形参n的库函数可以有效防止因字符串长度过长导致的段错误,建议使用带n的字符串函数. 一 .sn ...

  9. MySQL、SQL Server中字符串拼接

    一.MySQL中字符串拼接 1.使用加号"+"实现 在Java.C#等编程语言中字符串的拼接可以通过加号"+"来实现, 在MySQL中也可以使用加号" ...

最新文章

  1. Microsoft Dynamics CRM server 2013 中业务规则,有点像C#的正则表达式
  2. FPGA的设计艺术(13)使用generate语句构建可重用的逻辑设计
  3. 最简单的http服务器实现
  4. 【机器学习】用PyCaret创建整个机器学习管道
  5. 工作300:处理预览界面
  6. python基础19 -------面向对象终结篇(介绍python对象中各种内置命令)
  7. 配置web.xml和glassfish容器实现javaEE表单验证
  8. iOS之 simlator模拟器截屏
  9. 几百万数据量的Excel导出会内存溢出和卡顿?那是你没用对方法!
  10. [学习笔记]opencv双线性插值法图像放大
  11. html中a做成按钮,css如何将超链接a设计成按钮样式
  12. 转未来10年35项最值得你期待的技术
  13. 个人外汇买卖能不能一直等到赢利再平仓
  14. 送女朋友实用的七夕礼物、送女朋友七夕礼物最有意义排行榜
  15. 线性目标规划(线性目标规划、图解法、单纯形法)
  16. 西宁市财政局容灾备份项目
  17. localtime、localtime_s、localtime_r的使用
  18. Substrate 基础 -- 教程(Tutorials)
  19. 第13期《凤凰涅槃,浴火重生!》2月刊
  20. OpenCV:将一幅图像复制到另一幅图像的指定区域中ROI

热门文章

  1. React-Router V6 传参,类式组件用ref搭个桥接收。
  2. endnote 文献保留前三个作者
  3. Max Levchin与Peter Thiel谈创新:“一半是海水,一半是火焰”
  4. 中国银联与上海银行基于SDN的下一代金融云网络联合研究与应用实践:从分层分区传统架构向云网架构转型...
  5. dvi显卡连接html显示器,显示器中的DVI接口显卡怎么切换成VGA接口?
  6. VS2010SP1修复补丁Microsoft Visual Studio 2010 Service Pack 1
  7. PHP的模板注入(Smarty模板)
  8. AdTime大数据广告的想象空间
  9. 仙之侠道2玖章青门任务怎么做_仙之侠道II玖章7.18下载-仙之侠道II玖章7.18【附攻略】 - 河东下载站...
  10. 高考结束,人生才刚刚开始,10年职场老鸟给的建议