Не возвращать вывод

Я очень новичок в xquery, я пытаюсь проверить, существует ли атрибут в элементе, используя xquery, если существует возврат, возврат только для элемента b с идентификатором.

Я пробовал следующее:

Вход

<a>
 <b id="id2">text</b>
 <x id="id4">text</x>
 <b>text</b>
 <b id="id5">text</b>
</a>

XQuery:

for $x in (*:a/*:b)
let $new:=
let $id := exists($x/@id)
let $c := if ($id = true()) then ($x/@id/string()) else()
return
<string key="id">{$c}</string>
return ($new)

Но я также получаю возвращаемую строку для несуществующего элемента. Как не возвращаться для элементов, у которых нет идентификатора.

выход:

 <string key="id">id2</string>
 <string key="id"/>
 <string key="id">id5</string>

Есть ли простой способ сделать это.


person VSr    schedule 26.02.2018    source источник


Ответы (1)


Это компактное решение:

a/b/@id/<string key="id">{ string(.) }</string>

Вот более подробная альтернатива (есть много других):

for $b in *:a/*:b
let $new := 
  let $id := $b/@id/string()
  where exists($id)
  return <string key="id">{ $id }</string>
return $new
person Christian Grün    schedule 26.02.2018