Xquery编辑中字符串的拼接
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编辑中字符串的拼接相关推荐
- android——databinding中字符串的拼接处理、TextView显示的值随activity的属性值改变同时改变--LiveData、双向绑定过滤器、监听某个值的改变
简介 使用的技术是观察者与被观察者的模式,在google推荐的案例中也有使用到,现在我把它封装成一个扩展函数,使得使用更加简单明了 注意 1.在build.gradle添加databinding,在a ...
- JavaScript中字符串连接/拼接的四种方式
JavaScript中连接字符串的方式有4种,分别是使用加号运算符连接.使用${}配合反引号连接.使用concat()函数连接.使用join()函数连接. 1. 使用加号运算符 示例代码如下: let ...
- sqlite插入记录值为纯数字的字符串的问题以及sqlite语句中字符串的拼接
当向sqlite数据库中插入某条记录,而这条记录中的某个字段为纯数字的字符串时,在这条记录插入到数据库中时,这个字段的值就有一定几率会被转成数字Y_Y!! 例如下面的代码: String phone ...
- adnroid string拼接_Android开发中string.xml文件中字符串的拼接
第一种方法: 在string.xml中进行操作 MyStringDemo 我今年%1d岁了,上%s年级! 我今年%1$3d岁了,上%2$9s年级! 在代码中使用的地方只需要调用String类的form ...
- php中怎么拼接,php中字符串的拼接用法详解
首先和大家说下,学习任何一门语言都要去官网去看文档,因为官方的文档正确性有保证,并且也最有广泛性. 有两个字符串(string)运算符.第一个是连接运算符("."),它返回其左右参 ...
- Oracle和Mysql中的字符串的拼接
SQL允许两个或者多个字段之间进行计算,字符串类型的字段也不例外.比如我们需要 以"工号+姓名"的方式在报表中显示一个员工的信息,那么就需要把工号和姓名两个字符 串类型的字段拼接计 ...
- MySql、Oracle、MSSQL中的字符串的拼接
字符串的拼接 1,Mysql 在Java.C#等编程语言中字符串的拼接可以通过加号"+"来实现,比如:"1"+"3"."a&quo ...
- C/C++中字符串拼接的使用详解
C/C++中针对字符串函数的使用过程中,需要格外注意字符串终止符'\0'.字符串结尾处默认带'\0'. 带形参n的库函数可以有效防止因字符串长度过长导致的段错误,建议使用带n的字符串函数. 一 .sn ...
- MySQL、SQL Server中字符串拼接
一.MySQL中字符串拼接 1.使用加号"+"实现 在Java.C#等编程语言中字符串的拼接可以通过加号"+"来实现, 在MySQL中也可以使用加号" ...
最新文章
- Microsoft Dynamics CRM server 2013 中业务规则,有点像C#的正则表达式
- FPGA的设计艺术(13)使用generate语句构建可重用的逻辑设计
- 最简单的http服务器实现
- 【机器学习】用PyCaret创建整个机器学习管道
- 工作300:处理预览界面
- python基础19 -------面向对象终结篇(介绍python对象中各种内置命令)
- 配置web.xml和glassfish容器实现javaEE表单验证
- iOS之 simlator模拟器截屏
- 几百万数据量的Excel导出会内存溢出和卡顿?那是你没用对方法!
- [学习笔记]opencv双线性插值法图像放大
- html中a做成按钮,css如何将超链接a设计成按钮样式
- 转未来10年35项最值得你期待的技术
- 个人外汇买卖能不能一直等到赢利再平仓
- 送女朋友实用的七夕礼物、送女朋友七夕礼物最有意义排行榜
- 线性目标规划(线性目标规划、图解法、单纯形法)
- 西宁市财政局容灾备份项目
- localtime、localtime_s、localtime_r的使用
- Substrate 基础 -- 教程(Tutorials)
- 第13期《凤凰涅槃,浴火重生!》2月刊
- OpenCV:将一幅图像复制到另一幅图像的指定区域中ROI
热门文章
- React-Router V6 传参,类式组件用ref搭个桥接收。
- endnote 文献保留前三个作者
- Max Levchin与Peter Thiel谈创新:“一半是海水,一半是火焰”
- 中国银联与上海银行基于SDN的下一代金融云网络联合研究与应用实践:从分层分区传统架构向云网架构转型...
- dvi显卡连接html显示器,显示器中的DVI接口显卡怎么切换成VGA接口?
- VS2010SP1修复补丁Microsoft Visual Studio 2010 Service Pack 1
- PHP的模板注入(Smarty模板)
- AdTime大数据广告的想象空间
- 仙之侠道2玖章青门任务怎么做_仙之侠道II玖章7.18下载-仙之侠道II玖章7.18【附攻略】 - 河东下载站...
- 高考结束,人生才刚刚开始,10年职场老鸟给的建议