2015-08-08 4 views
0
<?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 содержит номер заказа по информации о доставке.XQuery - для вставки данных разделенных узлов в другой узел

XML хранится в BaseX, и мне нужен следующий отчет, который должен быть сгенерирован из выше XML.

<A><DelInfo>123-20150308-345</DelInfo><OrderNo>11</OrderNo><Report>20150308 - 11</Report></A> 
..... 

Другими словами, я хочу, чтобы вставить дополнительный узел Report с указанием даты и приказа № Любая идея?

+0

что вы пробовали? – John

+0

Я немного смущен о том, как получить дату! –

+0

Вам нужно использовать функции 'substring-after()' и 'substring-before()' для извлечения 'Date'. – John

ответ

0

Замените 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() вернет строку до -. Таким образом вы получите часть «Дата».

 Смежные вопросы

  • Нет связанных вопросов^_^