2012-01-04 4 views
1

Как сохранить строку, которая уже является xml, как атрибут корневого узла другого xml?SQL Server 2008 рендеринг вложенных XML

Строка, которую я хочу сохранить, - @inputXmlString. Это значение:

<?xml version="1.0" encoding="utf-8"?> 
<OneViewReviewRq 
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd = "http://www.w3.org/2001/XMLSchema"> 
<LOAN>ASFDK</LOAN> 
</OneViewReviewRq> 

Я должен хранить это значение в качестве атрибута к другому узлу сказать row, который является корневым узлом. Это то, что желаемый результат должен быть:

<root oneViewXml="<?xml version="1.0" encoding="utf-8"?> 
<OneViewReviewRq 
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd = "http://www.w3.org/2001/XMLSchema"> 
<LOAN>ASFDK</LOAN> 
</OneViewReviewRq>" /> 

Проблема: когда я использую for xml path или for xml raw цитаты и <, > символы не отображаются как есть, а &lt; и &gt; т.д.

Этом является запрос я использую:

select @OutputXml=(select @inputXmlString as '@oneViewXml' 
for xml path('root')) 

Это выход:

<root oneViewXml="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&#xD;&#xA;&lt;OneViewReviewRq&#xD;&#xA; xmlns:xsi = &quot;http://www.w3.org/2001/XMLSchema-instance&quot;&#xD;&#xA; xmlns:xsd = &quot;http://www.w3.org/2001/XMLSchema&quot;&gt;&#xD;&#xA;&lt;LOAN&gt;ASFDK&lt;/LOAN&gt;&#xD;&#xA;&lt;/OneViewReviewRq&gt;" /> 

ответ

0

Это точно так же, как и должно быть, потому что <>& являются недопустимыми символами в атрибутах XML. Когда вы запрашиваете свой XML для значения атрибута, вы получите XML обратно, как было.

Попробуйте это:

declare @inputXmlString nvarchar(max) = 
'<?xml version="1.0" encoding="utf-8"?> 
<OneViewReviewRq 
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd = "http://www.w3.org/2001/XMLSchema"> 
<LOAN>ASFDK</LOAN> 
</OneViewReviewRq>' 

declare @OutputXml xml 

select @OutputXml=(select @inputXmlString as '@oneViewXml' 
for xml path('root')) 

select @OutputXml.value('root[1]/@oneViewXml', 'nvarchar(max)') 

http://data.stackexchange.com/stackoverflow/qt/123198/

+0

Спасибо Mikael..what вы сказали, работает идеально. – anshul2181981