Атрибуты BaseX не могут быть сериализованы

У меня есть этот простой файл XML:

<catalog>
  <product dept="WMN">
    <number>557</number>
    <name language="en">Fleece Pullover</name>
    <colorChoices>navy black</colorChoices>
  </product>
  <product dept="ACC">
    <number>563</number>
    <name language="en">Floppy Sun Hat</name>
  </product>
  <product dept="ACC">
    <number>443</number>
    <name language="en">Deluxe Travel Bag</name>
  </product>
  <product dept="MEN">
    <number>784</number>
    <name language="en">Cotton Dress Shirt</name>
    <colorChoices>white gray</colorChoices>
    <desc>Our<i>favorite</i>shirt!</desc>
  </product>
</catalog>

Я читаю книгу под названием XQuery автора Присцилы Уолмсли и он говорит ввести команду:

doc("catalog.xml")/*/product/@dept

поэтому я печатаю в BaseX

xquery doc("catalog.xml")/*/product/@dept

и я получаю эту ошибку:

Error:
[SENR0001] Attributes cannot be serialized:attribute dept { "WMN" }.

Несмотря на это книга, в которой говорится:

вернет четыре атрибута отдела во входном документе.

Что я делаю не так?


person MrIcyBalls    schedule 09.07.2014    source источник
comment
Это может быть просто ограничение вашей тестовой среды. Например, попробуйте принудительно сериализовать его как строку: xquery doc("catalog.xml")/*/product/@dept/string()   -  person wst    schedule 10.07.2014
comment
отличный @wst хороший улов! Если вы захотите добавить это в ответ, это будет полезно для других пользователей xquery doc("catalog.xml")/*/product/string(@dept)   -  person MrIcyBalls    schedule 10.07.2014


Ответы (2)


BaseX просто строго относится к сериализации. Он не будет жаловаться, если вы принудительно превратите узлы атрибутов в строки:

xquery doc("catalog.xml")/*/product/@dept/string()
person wst    schedule 09.07.2014
comment
на самом деле это было проверено и сработало: xquery doc("catalog.xml")/*/product/string(@dept) - person MrIcyBalls; 10.07.2014

Спецификация XQuery 3.1 Serialization предоставляет новый "адаптивный " режим сериализации, который позволяет сериализовать узлы атрибутов и пространств имен. Начиная с версии 8.0 BaseX, этот режим используется по умолчанию.

person Christian Grün    schedule 06.03.2015