在 ASP.NET 应用程序中,我在 sql 数据库中查询了一些数据,其中一部分数据是 XML 字符串。一旦检索到 ASP.NET 应用程序,我想将此 XML 字符串“转换”为 DataTable 对象。
我有 SQL 查询,它从提要表中选择所有提要(它们的标题、描述)和来自相关表的附加数据(在这种情况下是提要的标签)。我检索 XML 字符串中的附加数据(我FOR XML PATH('')
在 sql 中使用实现):
SELECT
F.ID, F.Title, F.Text,
(SELECT
T.TagID, T.TagName
FROM
sn.Tag AS T
INNER JOIN
sn.FeedTag AS FT ON FT.TagID = T.TagID
WHERE
FT.FeedID = F.FeedID
FOR
XML PATH('tag')
)
AS FeedTagsXML
FROM
sn.Feed AS F
WHERE
F.ID = 12876
此查询的 XML 结果是(FeedTagsXML
列的值):
<tag>
<TagID>114</TagID>
<TagName>Test 1</TagName>
</tag>
<tag>
<TagID>115</TagID>
<TagName>Test 2</TagName>
</tag>
<tag>
<TagID>116</TagID>
<TagName>test 3</TagName>
</tag>
<tag>
<TagID>117</TagID>
<TagName>Test 4</TagName>
</tag>
现在我只需要将此字符串转换为 DataTable 对象。目前我有一个方法可以为这个 xml 字符串返回 DataTable:
public DataTable GetDataTableFromXML(string xmlStringForDataTable)
{
//read into dataset
DataSet dataSet = new DataSet();
xmlStringForDataTable = "<items>" + xmlStringForDataTable+ "</items>";
dataSet.ReadXml(new StringReader(xmlStringForDataTable));
DataTable dt = new DataTable();
//return single table inside of dataset
if (dataSet.Tables.Count > 0)
{
dt = dataSet.Tables[0];
}
return dt;
}
这种方法有点工作,但我相信有比这更好的解决方案。例如,我不喜欢的一件事是将额外的根元素附加到整个字符串以便能够转换它(如果我不这样做,整个方法会失败),并且还将 DataSet 用于简单的 DataTable。我该如何改进这种方法/是否有某种方法(我还不知道)以更清洁的方式将 xml 字符串转换为 DataTable C# 对象?