XML выглядит так:

<saw:deliveryContent format="comma" disposition="attachment" xmlns:saw="uri">
    <saw:headline>
        <saw:caption>
            <saw:text>Beer PMIX Data</saw:text>
        </saw:caption>
    </saw:headline>
    <saw:attachmentMessage>
        <saw:caption>
            <saw:text>Beer PMIX data used in the PMIX Data - ROQ Stars file.</saw:text>
        </saw:caption>
    </saw:attachmentMessage>
    <saw:reportRef path="Beer PMIX (Scheduled)"/>
</saw:deliveryContent>

Моя таблица результатов должна содержать

text ->Beer PMIX data used in the PMIX Data - ROQ Stars file.
reportRef path ->"Beer PMIX (Scheduled)

Нравится: text|reportRef path

Можно ли получить эти значения непосредственно из запроса или хранимой процедуры?

0
Amit Karwa 11 Сен 2018 в 11:08

1 ответ

Лучший ответ

Ваш xml недействителен, потому что нет объявления префикса - saw.

Так можно проанализировать слегка измененный xml:

DECLARE @xml xml = '<saw:deliveryContent format="comma" disposition="attachment" xmlns:saw="uri">
    <saw:headline>
        <saw:caption>
            <saw:text>Beer PMIX Data</saw:text>
        </saw:caption>
    </saw:headline>
    <saw:attachmentMessage>
        <saw:caption>
            <saw:text>Beer PMIX data used in the PMIX Data - ROQ Stars file.</saw:text>
        </saw:caption>
    </saw:attachmentMessage>
    <saw:reportRef path="/shared/BJs Analytics/Departments/Planning/Jon/Agent Reports/Beer PMIX (Scheduled)"/>
</saw:deliveryContent>';

WITH XMLNAMESPACES ('uri' as saw)
SELECT
  @xml.value('(saw:deliveryContent/saw:headline/saw:caption/saw:text)[1]','nvarchar(max)'),
  @xml.value('(saw:deliveryContent/saw:attachmentMessage/saw:caption/saw:text)[1]','nvarchar(max)'),
  @xml.value('(saw:deliveryContent/saw:reportRef/@path)[1]','nvarchar(max)')
0
Paweł Dyl 11 Сен 2018 в 08:27