2011-08-01 9 views
1

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文字列を変換するのですか?

答えて

0

データセットを使用しない場合は、まずDataTable.ReadXMLを使用できます。私はあなたが実際に必要とするが、私はこれが今まで

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

これは、今、あなたのために多くの助けになることがない可能性があります簡単な解決策だと思うものを、知らない

+0

私はそれを試みました。 'DataTable.ReadXml()'の中で 'new StringReader(xmlStringForDataTable)'を使うとエラーを返します。 – Janez

3

、私はそれを探して他人を助けることを願っていますそれのための。

関連する問題