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# 객체로 변환하는 방법이 훨씬 깨끗합니다.
나는 그것을 시도했다. 'DataTable.ReadXml()'내부에서'new StringReader (xmlStringForDataTable)'사용시 오류를 반환합니다. – Janez