从数据库列中的字符串中提取XML值

时间:2014-02-06 14:02:06

标签: c# sql xml linq

我已经看到了各种各样的问题,但似乎没有一个问题在解决我的问题。我有一个Umbraco站点,它将页面内容作为XML存储在数据库列中。一个例子如下:

enter image description here

很抱歉屏幕抓取而不是实际代码,但编辑器一直在解决问题。

我理想的做法是在c#/ Linq的页面上(一直试图从字符串值进行操作)或在SQL查询中。能够提取'url-name','nodeName'和'bodyText'字段。

非常感谢

2 个答案:

答案 0 :(得分:1)

由于列未在数据库中定义为XML,因此您可以提取字符串并将文本/字符串解析为XML文档:

// xml would be pulled from the DB
string xml = "<RunwayTextpage nodeName=\"Test page\" urlName=\"test-page\"><bodyText>Body Text</bodyText></RunwayTextpage>";

var doc = XDocument.Parse( xml );

string nodeName = doc.Root.Attribute( "nodeName" ).Value;
string urlName = doc.Root.Attribute( "urlName" ).Value;
string bodyText = doc.Root.Element( "bodyText" ).Value;

另一种选择是在SQL查询本身中使用字符串操作,但最终可维护性较差,而上述内容很容易理解。

答案 1 :(得分:0)

为什么不使用uQuery?实际上并不知道您的目的,但它有一个名为GetNodesByXPath的方法,它通过查询内存中的xml缓存从XPath表达式中获取节点或节点的集合。

如果您的树很大,那么在性能方面更明智。