Запрос XML-документа в SQL - PullRequest
       0

Запрос XML-документа в SQL

0 голосов
/ 01 апреля 2011

Я получил следующий фрагмент кода из довольно большого XML-файла, над которым я работаю:

<Product id="4161" removed="false">
    <NativeReviewStatistics>
        <AverageRatingValues>
            <AverageRatingValue>
                <AverageRating>3.0</AverageRating>
                <RatingDimension>
                    <ExternalId>Quality</ExternalId>
                    <RatingRange>5</RatingRange>
                </RatingDimension>
            </AverageRatingValue>
            <AverageRatingValue>
                <AverageRating>4.0</AverageRating>
                <RatingDimension>
                    <ExternalId>Value</ExternalId>
                    <RatingRange>5</RatingRange>
                </RatingDimension>
            </AverageRatingValue>
        </AverageRatingValues>
    </NativeReviewStatistics>
</Product>

Я хочу получить конечный результат со строками, которые выглядят следующим образом:

ProductId | ExternalId | AveRating | RatingRange
4161        Quality      3.0         5
4161        Value        4.0         5

Пока у меня есть это:

    SELECT  feed.product.value('@id[1]', 'INT') AS ProductId
    FROM    @xmlData.nodes('/Feed/Product') feed ( product )

Но я немного озадачен тем, куда идти отсюда. Есть идеи?

1 Ответ

1 голос
/ 02 апреля 2011
SELECT
    feed.product.value('@id[1]', 'INT') AS ProductId,
    step3.data.value('ExternalId[1]', 'varchar(50)') AS ExternalId,
    step2.data.value('AverageRating[1]', 'decimal(10,1)') AS AveRating,
    step3.data.value('RatingRange[1]', 'int') AS RatingRange
FROM
    @xmlData.nodes('/Feed/Product') feed ( product )
CROSS APPLY
    feed.product.nodes('NativeReviewStatistics/AverageRatingValues/AverageRatingValue') step2(data)
CROSS APPLY    
    step2.data.nodes('RatingDimension')  step3(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...