2013-03-11 161 views
3

目前我有xml存儲在ms sql dbase和而不是文件。這是一個小樣本。從數據庫解析xml

<NewDataSet> 
<Table1> 
<billTo_lastName>asdf</billTo_lastName> 
<orderAmount>160.00</orderAmount> 
<billTo_street1>asdf</billTo_street1> 
<card_accountNumber>############1111</card_accountNumber> 
</Table1> 
</NewDataSet> 

目前我正在返回的結果中確定年代

解析上述內容並將其顯示在頁面上的最佳方法是什麼? 頁面顯示僅供參考。不會對xml進行額外的處理。

我希望頁面沿着這些行顯示一些內容。

billTo_lastName: asdf 
orderAmount: 160.00 
etc. 
+0

XML是否存儲在數據庫的XML數據類型字段中? – 2013-03-11 22:02:18

+0

你的問題不是100%清楚。 你需要哪些解析數據?你打算對分析數據做額外的處理嗎?你想如何顯示它? – MarcinJuraszek 2013-03-11 22:02:31

+0

該字段是varchar max。 – Prescient 2013-03-11 22:04:31

回答

4

取決於您想如何處理它。一種方法是創建一個XmlDocument,然後調用LoadXml

// get the data from the data table, into a string. 

// then create an XML document and load the string 
var doc = new XmlDocument(); 
doc.LoadXml(dataString); 

如果你想使用LINQ到XML,你會創建一個XElement

var element = XElement.Load(dataString); 
+0

謝謝你指出我正確的方向。 – Prescient 2013-03-12 13:56:42

0

你可以回報他們爲列從數據庫到數據表中,然後使用任何數據控件與的ItemTemplate例如顯示它們:

declare @xml as xml 
set @xml = '<NewDataSet> 
<Table1> 
<billTo_lastName>asdf</billTo_lastName> 
<orderAmount>160.00</orderAmount> 
<billTo_street1>asdf</billTo_street1> 
<card_accountNumber>############1111</card_accountNumber> 
</Table1> 
</NewDataSet>' 

;with cte as ( 
    select @xml xmlstring 
) 
SELECT 
xmlstring.value('(/NewDataSet//Table1/billTo_lastName/node())[1]','VARCHAR(100)') 
as billTo_lastName, 
xmlstring.value('(/NewDataSet//Table1/orderAmount/node())[1]','VARCHAR(20)') 
as orderAmount 
FROM cte 

SQL DEMO

3

感謝吉姆指點我正確的方向。 XmlDocuments LoadXml工作得很好。 然後,我可以將它放入一個XmlNodeList並選擇頂層節點。 做了XmlNode並遍歷子節點。

DataTable dt = sqlselect(sqlQuery, parameter); 
    var doc = new XmlDocument(); 
    doc.LoadXml(dt.Rows[0]["ua_post"].ToString()); 

    XmlNodeList nl = doc.SelectNodes("NewDataSet"); 
    XmlNode root = nl[0]; 

    foreach (XmlNode xnode in root.ChildNodes[0]) 
    { 
     string name = xnode.Name; 
     string value = xnode.InnerText; 
     string nv = "<b>" + name + ":</b> " + value; 
     Label1.Text += nv + " <br />" + Environment.NewLine; 
    } 

而且我在頁面上得到一個簡單的顯示。

billTo_lastName: asdf 
    orderAmount: 160.00 
    billTo_street1: asdf 
    card_accountNumber: ############1111