2013-05-28 3 views
0

У меня есть следующие XML все содержащиеся в одной ячейке в MSSQL БД:вытягивать одно значение из XML в MSSQL

<receipt reference="INT000003" major="2" minor="14.804" beta=""> 

<dates id="Booking Dates">  
<item id="Date of Booking">23 May 2013 - 17:09</item>  
</dates> 

<advertisement id="advertisement details"> 
<item id="Booked by">Mr System Administrator</item> 
<item id="Brand or Product">Testing</item> 
<item id="Priority">500</item> 
</advertisement> 

</receipt> 

Я хочу, чтобы получить значение <item id="Brand or Product">Testing</item> из этой клетки (в частности, «Testing», хотя) для использования на веб-странице на PHP. Кто-нибудь знает какой-либо PHP для чтения этого типа XML и поиска значений?

Спасибо.

ответ

1

Вы можете использовать DOMXPath::query для него в PHP. Сначала выберите весь XML из таблицы, как обычно, и получите правильные элементы.

<?php 
$xml = <<<END 
<receipt reference="INT000003" major="2" minor="14.804" beta=""> 
    <dates id="Booking Dates">  
    <item id="Date of Booking">23 May 2013 - 17:09</item>  
    </dates> 

    <advertisement id="advertisement details"> 
    <item id="Booked by">Mr System Administrator</item> 
    <item id="Brand or Product">Testing</item> 
    <item id="Priority">500</item> 
    </advertisement> 

</receipt> 
END; //you would load it from the table 

$dom = new DOMDocument; 
$dom->loadXML($xml); 
$xpath = new DOMXPath($dom); 
$query = "//advertisement/item"; 

$items = $xpath->query($query); 

foreach ($items as $item) { 
    echo $item->nodeValue; 
} 
?> 

Этот выход будет

Mr System Administrator 
Testing 
500 

И если вам потребуется значение определенного ID вы можете использовать

<?php 
$dom = new DOMDocument; 
$dom->loadXML($xml); 
$xpath = new DOMXPath($dom); 
$query = "//advertisement/item[@id='Brand or Product']"; 

$items = $xpath->query($query); 

foreach ($items as $item) { 
    echo $item->nodeValue; 
} 

Выход:

Testing 
+0

отработал отлично, спасибо! – Renny

1

Это может также сделано в SQL, как показано ниже:

declare @xml xml = 
'<receipt reference="INT000003" major="2" minor="14.804" beta=""> 

<dates id="Booking Dates">  
<item id="Date of Booking">23 May 2013 - 17:09</item>  
</dates> 

<advertisement id="advertisement details"> 
<item id="Booked by">Mr System Administrator</item> 
<item id="Brand or Product">Testing</item> 
<item id="Priority">500</item> 
</advertisement> 

</receipt>' 

select @xml.value 
    ('(/receipt/advertisement/item[@id="Brand or Product"])[1]', 'nvarchar(100)') 

Кроме того, вы можете напрямую получить значение из таблицы, как показано ниже:

select cast(YOUR_COLUMN_NAME as XML).value('(/receipt/advertisement/item[@id="Brand or Product"])[1]', 'nvarchar(100)') 
as s from YOUR_TABLE_NAME 
+0

@ Renny: Помогает ли это? –

+0

Это также работает непосредственно на столбец таблицы? –

+1

Да, да. См. Обновление. –

Смежные вопросы