XQuery - вставить данные разделенных узлов в другой узел
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<A><DelInfo>123-20150308-345</DelInfo><OrderNo>11</OrderNo></A>
<A><DelInfo>1204-20150308-355</DelInfo><OrderNo>15</OrderNo></A>
<A><DelInfo>153-20150408-343</DelInfo><OrderNo>10</OrderNo></A>
<A><DelInfo>44345-20150308-341</DelInfo><OrderNo>21</OrderNo></A>
<A><DelInfo>153-20150204-245</DelInfo><OrderNo>1</OrderNo></A>
<A><DelInfo>423-20150311-445</DelInfo><OrderNo>13</OrderNo></A>
..........
</Data>
Я получаю следующий XML. DelInfo
узел содержит комбинацию EmpId, даты доставки и номера квитанции. OrderNo
узел содержит номер заказа с информацией о доставке.
XML хранится в BaseX, и мне нужно создать следующий отчет из приведенного выше XML.
<A><DelInfo>123-20150308-345</DelInfo><OrderNo>11</OrderNo><Report>20150308 - 11</Report></A>
.....
Другими словами, я хочу вставить дополнительный узел Report
с датой и номером заказа. Есть идеи?
1 ответ
Решение
Замещать yourdoc
с вашим именем документа.
for $x in doc('yourdoc')//A
let $d := substring-before(substring-after($x/DelInfo, "-"), "-")
let $o := $x/OrderNo/text()
let $i := <C>{concat($d, " - ", $o)}</C>
return
insert node $i after $x/OrderNo
Внутренний substring-after()
вернет строку после первого -
, Затем substring-before()
вернет строку до -
, Таким образом, вы получите часть даты.