加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用XQuery更改XML结构

发布时间:2020-12-16 23:07:26 所属栏目:百科 来源:网络整理
导读:我有一个包含Employees Name的 XML文件和由他们完成的Job. XML文件的结构是 – EmployeeAAA@A#B#C#D/EmployeeEmployeeBBB@A#B#C#D/EmployeeEmployeeCCC@A#B#C#D/EmployeeEmployeeDDD@A#B#C#D/Employee 有成千上万的记录,我必须改变结构 – Employee NameAAA/
我有一个包含Employees Name的 XML文件和由他们完成的Job.
XML文件的结构是 –

<Employee>AAA@A#B#C#D</Employee>
<Employee>BBB@A#B#C#D</Employee>
<Employee>CCC@A#B#C#D</Employee>
<Employee>DDD@A#B#C#D</Employee>

有成千上万的记录,我必须改变结构 –

<Employee>
  <Name>AAA</Name>
  <Jobs>
   <Job>A</Job>
   <Job>B</Job>
   <Job>C</Job>
   <Job>D</Job>
  </Jobs>
</Employee>

如何在BaseX中使用XQuery完成此操作?

解决方法

3个XQuery函数,substring-before,substring-after和tokenize用于获取
所需的输出.

substring-before用于获取Name.

类似地,substring-after用于获取Job部分.

然后,tokenize函数用于拆分作业.

let $data :=
  <E>
    <Employee>AAA@A#B#C#D</Employee>
    <Employee>BBB@A#B#C#D</Employee>
    <Employee>CCC@A#B#C#D</Employee>
    <Employee>DDD@A#B#C#D</Employee>
  </E>


for $x in $data/Employee
return 

<Employee>
   {<Name>{substring-before($x,"@")}</Name>}
   {<Jobs>{
   for $tag in tokenize(substring-after($x,"@"),'#')
   return 
     <Job>{$tag}</Job>
   }</Jobs>
}</Employee>

HTH …

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读