Я действительно новичок в XMl и мне было поручено извлечь некоторые значения из столбца XML.Может ли кто-нибудь помочь? Извлечение значений из XML (SOAP) в SQL Server 2008
Я прочитал много примеров того, как это сделать в Интернете и здесь, и попробовал несколько разных методов. Пока я могу заставить их работать, они возвращают только нулевые значения, поэтому ясно, что что-то не так. Единственное различие, которое я вижу, это то, что в нашем XML-коде они используют SOAP. Предыдущий разработчик написал код, и поэтому я не могу их спросить.
Эти методы я пытался:
SELECT
settings.value('item[1]/_value[1]', 'int') as PrinterId
FROM dbo.usersettings
where userid = 2156
----------------------------------------------------------------------------------
create table XMLPrinters (PrinterList xml)
insert XMLPrinters select settings
from dbo.UserSettings
where userid = 2156
select
r.p.value ('item[1]/_key[1]', 'nvarchar (50)') as PrinterType,
r.p.value ('item[1]/_value[1]', 'int') as PrinterId
from XMLPrinters
cross apply printerlist.nodes ('//item') r(p)
Как я уже говорил, я очень новичок в XML и не из фона кодирования, так что, вероятно, что-то я отсутствует, но XML-код, похоже, не соответствует другим форматам, которые я видел в Интернете, и я думаю, что это, вероятно, связано с SOAP.
Сам код длиной 2496 строк, но это выдержка из начала, где я пытаюсь извлечь значения из:
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<SOAP-ENC:Array SOAP-ENC:arrayType="xsd:anyType[5]">
<item xmlns:a2="http://schemas.microsoft.com/clr/ns/System.Collections" xsi:type="a2:DictionaryEntry">
<_key xsi:type="xsd:string">primaryprinter</_key>
<_value xsi:type="xsd:anyType" xsi:null="1" />
</item>
<item xmlns:a2="http://schemas.microsoft.com/clr/ns/System.Collections" xsi:type="a2:DictionaryEntry">
<_key xsi:type="xsd:string">secondaryprinter</_key>
<_value xsi:type="xsd:anyType" xsi:null="1" />
</item>
<item xmlns:a2="http://schemas.microsoft.com/clr/ns/System.Collections" si:type="a2:DictionaryEntry">
<_key xsi:type="xsd:string">i18mminstancelabel</_key>
<_value xsi:type="xsd:string">1056</_value>
</item>
В конце концов, что мне нужно сделать, это извлечь _value где _key = PrimaryPrinter и сделать это для каждого пользователя.
Любая помощь или идеи, которые были бы очень полезными!
С уважением
Джули
Это здорово спасибо! Я разместил его на другом форуме, и кто-то ответил тем же, что и вы, и теперь это работает! Большое спасибо за то, что вы вернулись ко мне! – JYatesDBA