ПАРСИНГ XML с использованием выражения XPath - PullRequest
0 голосов
/ 24 февраля 2012

Я должен проанализировать документ XML с помощью XQUERY. Выражение XPATh:

(fn:node-name(.) eq fn:QName(#namespace,#name))

где #namespace - это пространство имен для QName, указанного в качестве содержимого элемента <cf:qname>, а #name - локальное имя для QName

Скажите, пожалуйста, как получить данные узла?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 24 февраля 2012

Вы имеете в виду что-то подобное?

declare namespace cf="cf";

let $xml :=
  <x:ml xmlns:x="x"><x:yz/></x:ml>
let $cfqname :=
  <cf:qname><cf:namespace-uri>x</cf:namespace-uri><cf:local-name>yz</cf:local-name></cf:qname>
let $qname :=
  fn:QName($cfqname/cf:namespace-uri, $cfqname/cf:local-name)
return
  $xml//*[node-name(.) eq $qname]
0 голосов
/ 24 февраля 2012

Если URI пространства имен и имя узла статически известны, вы можете просто использовать

declare namespace ns='#namespace';
//ns:#name

В противном случае вы выбираете все узлы и проверяете имя с помощью предиката XPath:

//*[fn:node-name(.) eq fn:QName(#namespace,#name)]
...