Получение имен дочерних узлов

#xml #xquery

#xml #xquery

Вопрос:

Вот xml:

 <?xml version = "1.0"?>
<class>
   <student>
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
</class>
  

Я хочу написать XQuery, который возвращает :

 firstname
lastname
nickname
marks
  

логически это должно сработать :

 /class/student/*::name()
  

Но это не работает!
Знаете ли вы, какой правильный XQuery для получения списка имен дочерних узлов?

Ответ №1:

Вы можете вернуть имена дочерних узлов с помощью следующего кода:

 for $nam in doc("source.xml")/class/student/*
return name($nam)
  

Или вы можете использовать это более простое выражение:

 /class/student/*/name()
  

Это работает только с XPath-2.0, который поддерживается XQuery 1.0.

Комментарии:

1. Мне нужен один оператор XQuery. Это не инструкция XQuery.

2. Я тестировал это с помощью Saxon. Оба выражения работают и возвращают желаемый результат.

3. ОК. Я хочу запустить его с XML версии 1.0. у нас нет сторонних библиотек.

4. когда я запускаю /class / student /*/name () , я получаю ошибку в notepad или VisualStudio.

5. XQuery 1.0 должен поддерживать XPath-2.0, потому что «Модель данных XQuery и XPath (XDM) — это модель данных, совместно используемая языками программирования XPath 2.0, XSLT 2.0 и XQuery». . Если этого не происходит, это не XQuery.