Saxon XPath error - «не может сериализовать атрибут» - PullRequest
0 голосов
/ 12 февраля 2019

когда я запускаю командную строку XQuery, она работает до тех пор, пока результатом является элемент.

Когда я расширяю этот XQuery для получения только значения атрибута, он выходит из строя с этой ошибкой:

SENR0001: Cannot serialize a free-standing attribute node (net.sf.saxon.om.NameOfNode)

Итак, это работает

java -cp ...Saxon-HE-9.9.0-1.jar net.sf.saxon.Query 
   -s:AnyXMLFileAvailable.xml -qs:/

это не удается:

java -cp ...Saxon-HE-9.9.0-1.jar net.sf.saxon.Query 
   s:AnyXMLFileAvailable.xml -qs://@*

Пока в XML есть хотя бы один атрибут, эта команда не будет работать с указанной выше ошибкой

Я считаю, что это можно исправить с помощью лицензированного Saxon, который позволяет использоватьпереключатель

 -outval:recover 

.Есть ли другой способ?

1 Ответ

0 голосов
/ 13 февраля 2019

Метод сериализации по умолчанию при запуске Query из командной строки - «xml»;Я не хотел менять это по причинам совместимости.Метод сериализации "xml" завершается неудачно при попытке сериализации определенных результатов, включая карты, массивы и узлы атрибутов.

Если вы задали !method=adaptive в командной строке (экранирование "!" С помощью "\"если используется bash), то сериализация никогда не должна завершаться с ошибкой, это приведет к некоторому представлению результата запроса.Если результат является атрибутом, он будет представлен как name="value", который может быть или не быть тем, что вы хотите.Если вы действительно хотите получить только строковое значение атрибута, то вам нужно извлечь его в запросе, например, с помощью функций string() или data().

Параметр -outval совершенно не имеет значения,это связано с проверкой схемы результата запроса.

...