2011-08-01 3 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 개체로 변환하는 것입니다. 현재 내가이 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; 
} 

이러한 접근 방식은 좀 작동을하지만 난 이것보다 더 나은 솔루션이 있습니다 확신합니다. 예를 들어 싫어하는 것 중 하나는 전체 문자열에 추가 루트 요소를 추가하여 변환 할 수있는 경우 (이 전체 메서드가 실패하지 않으면) 및 간단한 DataTable에 대한 DataSet을 사용하는 것입니다. 어떻게하면이 방법을 개선 할 수 있을까요? (아직 알지 못하는) XML 스트링을 DataTable C# 객체로 변환하는 방법이 훨씬 깨끗합니다.

답변

0

데이터 집합을 사용하지 않는 경우 먼저 DataTable.ReadXML을 사용할 수 있습니다.

+0

나는 그것을 시도했다. 'DataTable.ReadXml()'내부에서'new StringReader (xmlStringForDataTable)'사용시 오류를 반환합니다. – Janez

3
나도 몰라

, 당신이 실제로 필요하지만, 나는 이것이이 지금 당신을 위해 많은 도움이 될하지 않을 수 있습니다 간단한 해결책 적

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

것 생각, 내가 그것을 다른 사람이 검색 도움이되기를 바랍니다 그것을 위해.

관련 문제