ASP.NETアプリケーションでは、いくつかのデータに対してSQLデータベースへのクエリがあり、データの一部はXML文字列です。私はこのXML文字列を一旦ASP.NETアプリケーションに取り込んだDataTableオブジェクトに "変換"したいと思います。XML文字列からDataTableオブジェクトへC#メソッド - アドバイスが必要
私はすべてのフィード(タイトル、説明)をフィードテーブルから選択する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
列の値)である:私は(私はSQLで
FOR XML PATH('')
を使用してこれを達成)XML文字列に追加のデータを取得
<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オブジェクトに変換することです。
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文字列のためのDataTableを返すメソッドを持っています。私が気に入らないものの1つは、文字列全体に追加のルート要素を追加して変換することができるようにすることです(この全メソッドが失敗した場合)。また、DataSetを単純なDataTableに使用することもできます。どのように私はこのメソッドを改善することができます/(もっと私はまだ分かりません)いくつかの方法は、DataTableのC#のオブジェクトには、よりクリーンな方法でXML文字列を変換するのですか?
私はそれを試みました。 'DataTable.ReadXml()'の中で 'new StringReader(xmlStringForDataTable)'を使うとエラーを返します。 – Janez