XQuery: создать новый элемент с заданным именем? - PullRequest
13 голосов
/ 30 марта 2010

У меня есть такие данные, как:

    <td>USERID</td>

    <td>NAME</td>

    <td>RATING</td>

Я хочу преобразовать это в:

<userid></userid>
<name></name>
<rating></rating>

Как я могу это сделать?

Ответы [ 2 ]

21 голосов
/ 30 марта 2010

Используйте конструктор вычисляемых элементов , чтобы создать элемент со значением lower-case узлов text для каждого из элементов td.

A конструктор вычисляемых элементов создает узел элемента, позволяющий как название и содержание узла быть вычисленным.

Для примера, предположив, что ваш XML находится в файле с именем foo.xml , вы можете сделать что-то вроде этого:

<doc>
{
for $name in doc('foo.xml')//td/text()
return element {lower-case($name)} {''}
}
</doc>

чтобы произвести это:

<?xml version="1.0" encoding="UTF-8"?>
<doc>
 <userid/>
 <name/>
 <rating/>
</doc>

Вы также можете оценить функцию lower-case() как часть выражения XPATH вместо конструктора элемента, например:

<doc>
{
for $name in doc('foo.xml')//td/text()/lower-case(.)
return element {$name} {''}
}
</doc>
0 голосов
/ 25 апреля 2017
return <doc>{
for $d in $doc/element()/text()
return element{fn:lower-case($d)} {}}</doc>  

где $ doc хранит Xml.

...