从数据库解析xml
问题描述:
目前我有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.
答
取决于您想如何处理它。一种方法是创建一个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
答
你可以回报他们为列从数据库到数据表中,然后使用任何数据控件与的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
答
感谢吉姆指点我正确的方向。 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
XML是否存储在数据库的XML数据类型字段中? – 2013-03-11 22:02:18
你的问题不是100%清楚。 你需要哪些解析数据?你打算对分析数据做额外的处理吗?你想如何显示它? – MarcinJuraszek 2013-03-11 22:02:31
该字段是varchar max。 – Prescient 2013-03-11 22:04:31