Ошибка XQuery при чтении атрибута из родительского узла с * typed * XML (значение () требует одиночного)

Обязательно проверьте файлы machine.config в обоих местах

C: \ Windows \ Microsoft.NET \ Framework [версия] \ Конфигурация C: \ Windows \ Microsoft.NET \ Framework64 [версия] \ Config

Я узнал, что попытался использовать все решения на этой странице.

1
задан Dale Burrell 27 March 2019 в 09:02
поделиться

1 ответ

Похоже, вы хорошо понимаете, что это не обычная проблема убеждения синтаксического анализатора в том, что передается только одна вещь value(). Эта проблема характерна для типизированного XML , как вы заметили.

Используя Google, я нашел этот древний пост с многообещающим текстом

. Rt является частью модели данных XQuery 1.0 / XPath 2.0.

Большинство людей получают от этого. Настоящее веселье начинается, когда вы создаете примеры, используя нетипизированные выражения XML и XPath с тестом узла text (). text () прекрасно работает при использовании нетипизированного XML, но не справляется с типизированным XML с простым содержимым

В нем говорится о SQL Books Online и рекомендациях по SQL Server 2005 XML. статья, которую я считаю , эта книга здесь . Я не искал более актуальную ссылку. Но используя то, что я нашел там, я смог решить вашу проблему: просто замените

SELECT r.o.value('(../@a)[1]','varchar(20)') FROM @x2.nodes('/r//o') r(o);

на

SELECT r.o.value('fn:string(../@a)[1]','varchar(20)') FROM @x2.nodes('/r//o') r(o);

По сути, value() не как получить значения типа typed-xml, но хочет строки. Итак, мы даем ему строку.

0
ответ дан AakashM 27 March 2019 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: