XML字符串到数据表对象的c#方法-需要建议

本文关键字:方法 字符串 数据表 对象 XML | 更新日期: 2023-09-27 18:04:04

. NET应用程序,我有一个查询到sql数据库的一些数据和数据的一部分是XML字符串。我想"转换"这个XML字符串到DataTable对象一旦检索到ASP。网络应用程序。

我有一个SQL查询,从feeds表中选择所有提要(标题,描述)和相关表中的附加数据(在本例中为提要标签)。我在XML字符串中检索额外的数据(我使用sql中的FOR XML PATH('')实现这一点):

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结果是(value of FeedTagsXML column):

<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;
} 

这种方法有点奏效,但我相信有比这更好的解决方案。例如,我不喜欢的一件事是附加额外的根元素到整个字符串,以便能够转换它(如果我不这样做,整个方法失败),也使用简单的数据表数据集。我该如何改进这种方法/是否有某种方式(我还不知道)以更干净的方式将xml字符串转换为数据表c#对象?

XML字符串到数据表对象的c#方法-需要建议

我不知道你真正需要的是什么,但我认为这将是最简单的解决方案

private DataTable convertStringToDataTable(string xmlString)
{
   DataSet dataSet = new DataSet();
   StringReader stringReader = new StringReader(xmlString);
   dataSet.ReadXml(stringReader);
   return dataSet.Tables[0];
}

这可能对你现在没有太大的帮助,我希望它能帮助其他人寻找它

对于初学者,您可以使用DataTable。ReadXML,如果你反对使用DataSet