Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 xml в resultset, нет данных :-(  [new]
Aleksey V.P.
Member

Откуда: Москва
Сообщений: 575
declare
    @_xml xml;

set @_xml = N'<?xml version="1.0"?>
<Contract xmlns="urn:UralsibinsNamespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <NS1:RDIntegrationPolicy xmlns:NS1="http://tempuri.org/UralSib/HTSoap">
    <RecordNumber xmlns="">0</RecordNumber>
    <ProductName xmlns="">Тестовое решение</ProductName>
    <PolicySerial xmlns="">ТЕСТ</PolicySerial>
    <PolicyNumber xmlns="">1800007909</PolicyNumber>
    <PolicyStatus xmlns="">Акцептован</PolicyStatus>
    <PolicyInsCurrency xmlns="">рубли</PolicyInsCurrency>
    <PolicyEffectiveDate xmlns="">2016-08-10T00:00:00</PolicyEffectiveDate>
    <PolicyExpirationDate xmlns="">2031-08-10T00:00:00</PolicyExpirationDate>
    <PolicyPeriod xmlns="">0</PolicyPeriod>
    <IsSuccessor xmlns="">false</IsSuccessor>
    <Errors xmlns="">
      <string>Ошибка извлечения информации по полису: Input string was not in a correct format.</string>
    </Errors>
  </NS1:RDIntegrationPolicy>
</Contract>

';

print convert( nvarchar(max), @_xml);

select
    tbl.policy.value( 'RecordNumber[1]', 'int') as record_number,
    tbl.policy.value( 'ProductName[1]', 'varchar(100)') as product_name
from
    @_xml.nodes( 'Contract/RDIntegrationPolicy') as tbl( policy)
;


Коллеги, вот это не возвращает resultset, не понимаю почему. Подскажите, пожалуйста.
30 авг 16, 11:34    [19606512]     Ответить | Цитировать Сообщить модератору
 Re: xml в resultset, нет данных :-(  [new]
Aleksey V.P.
Member

Откуда: Москва
Сообщений: 575
Забыл:

Microsoft SQL Server 2014 - 12.0.4100.1 (X64)
Apr 20 2015 17:29:27
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
30 авг 16, 11:36    [19606523]     Ответить | Цитировать Сообщить модератору
 Re: xml в resultset, нет данных :-(  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
...
@_xml.nodes( '//*:RDIntegrationPolicy') as tbl( policy)
30 авг 16, 11:43    [19606569]     Ответить | Цитировать Сообщить модератору
 Re: xml в resultset, нет данных :-(  [new]
Aleksey V.P.
Member

Откуда: Москва
Сообщений: 575
Konst_One
...
@_xml.nodes( '//*:RDIntegrationPolicy') as tbl( policy)


СПАСИТЕЛЬ!!!
30 авг 16, 11:45    [19606582]     Ответить | Цитировать Сообщить модератору
 Re: xml в resultset, нет данных :-(  [new]
RFW
Guest
Aleksey V.P.,

Если XML более сложный, имена нод повторяются в разных местах и "любая нода с этим именем" уже не канает, то надо указывать точный путь с префиксами неймспейсов. Ну и /text() не забывать, иначе может получиться, как в варианте ниже:

declare @_xml xml;

set @_xml = N'<Contract xmlns="urn:UralsibinsNamespace">
	<NS1:RDIntegrationPolicy xmlns:NS1="http://tempuri.org/UralSib/HTSoap">
		<RecordNumber xmlns="">0</RecordNumber>
		<ProductName xmlns="">Тестовое решение<PeskyNode> - отстой!</PeskyNode></ProductName>
	</NS1:RDIntegrationPolicy>
</Contract>';

with xmlnamespaces(
	'urn:UralsibinsNamespace' as RootNS,
	'http://tempuri.org/UralSib/HTSoap' as NS1
)
select
	tbl.policy.value('./RecordNumber[1]/text()[1]', 'int') as record_number,
	tbl.policy.value('./ProductName[1]', 'nvarchar(100)') as product_name,
	tbl.policy.value('./ProductName[1]/text()[1]', 'nvarchar(100)') as product_name_text
from @_xml.nodes('/RootNS:Contract/NS1:RDIntegrationPolicy') as tbl(policy);
31 авг 16, 05:51    [19610297]     Ответить | Цитировать Сообщить модератору
 Re: xml в resultset, нет данных :-(  [new]
Aleksey V.P.
Member

Откуда: Москва
Сообщений: 575
RFW,

Коллега, спасиба! Избегу потенциальных ошибок в будующем.
31 авг 16, 10:35    [19610783]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить