2013-05-28 26 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>出該小區的(特別是「測試」雖然)用於基於PHP的網頁。有誰知道任何PHP讀取這種類型的XML和搜索值?

謝謝。

回答

1

您可以在PHP中使用DOMXPath::query。首先從表格中選擇整個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

是的。查看更新。 –