Как устранить лишние объявления пространства имен в сгенерированном SQL XML? - PullRequest
4 голосов
/ 22 января 2010

Я хорошо настраиваю веб-приложение, которое вызывает сервисы SOAP, поддерживаемые вызовами хранимых процедур SQL. Обычно хранимые процедуры генерируют XML, который становится частью ответа SOAP, и этот XML имеет много лишних объявлений пространства имен xmlns. В патологических случаях это может быть 30% или более XML-кода, измеренного в байтах, например:

<GetFooResponse xmlns="http://service.url/">
    <GetFooResult>
        <FooItems xmlns="http://www.thisisalongishurl.com/schema12345/version12345">
            <Item xmlns="http://www.thisisalongishurl.com/schema12345/version12345" data="foo" />
            <Item xmlns="http://www.thisisalongishurl.com/schema12345/version12345" data="foo" />
            <Item xmlns="http://www.thisisalongishurl.com/schema12345/version12345" data="foo" />
            <Item xmlns="http://www.thisisalongishurl.com/schema12345/version12345" data="foo" />
            <Item xmlns="http://www.thisisalongishurl.com/schema12345/version12345" data="foo" />
        </FooItems >
    </GetFooResult>
</GetFooResponse>

SQL, который я использую для генерации XML, обычно следует этому шаблону:

WITH XMLNAMESPACES(DEFAULT 'http://www.thisisalongishurl.com/schema12345/version12345')
SELECT
    [Name],
    [Value]
FROM
    [Foo]
FOR XML PATH('Item'),
TYPE,
ROOT('FooItems');

Есть ли способ избежать создания лишних деформаций пространства имен xmlns для каждого элемента XML элемента?

спасибо.

1 Ответ

2 голосов
/ 22 января 2010
WITH    XMLNAMESPACES(
        'http://www.thisisalongishurl.com/schema12345/version12345' AS short,
        DEFAULT 'http://service.url/'
        ),
        [Foo] ([short:Name], [short:Value]) AS
        (
        SELECT  'testName', 'testValue'
        )
SELECT  *
FROM    [Foo]
FOR XML PATH('Item'),
TYPE,
ROOT('FooItems')

возвращает

<FooItems xmlns="http://service.url/" xmlns:short="http://www.thisisalongishurl.com/schema12345/version12345">
  <Item>
    <short:Name>testName</short:Name>
    <short:Value>testValue</short:Value>
  </Item>
</FooItems>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...