두 개의 문자열이 있습니다. 한 문자열에 XML 데이터가 있고 다른 문자열에 해당 XML 스키마가 있습니다. DataTable에서 데이터를 읽으려고합니다. 불가능한 것처럼 보입니다. 데이터 집합을 사용하고 싶지 않습니다. XML 데이터와 스키마를 메모리 스트림에 결합하여 읽을 수있는 방법이 있습니까?DataTable의 ReadXML 데이터 및 스키마
3
A
답변
4
DataTable의 메서드를 통해 xml을 직접 DataTable에로드하거나 임의의 스키마에서 DataTable을 직접 만들 수있는 방법이 없습니다. 이러한 작업은 DataSet을 통해 수행해야합니다. 그렇지 않으면 매우 복잡한 해결 방법을 수행하게됩니다.
XML 직렬화를 사용하여 이전에 직렬화 된 XML에서 데이터 집합을 다시 만들 수있는 몇 가지 기술이 있습니다. 이것은 임의의 스키마의 사용을 허용하지 않습니다.
XML을 (XDocument, XmlDocument 또는 XmlTextReader를 통해)로드하고 즉시 DataTable을 만드는 코드를 작성할 수도 있지만 작성하기가 쉽지는 않으며 꽤 오랜 시간이 걸릴 것입니다. 그것은 또한 바퀴의 재발 명입니다.
기본적으로 DataSet은 Xml에 여러 테이블을 포함 할 수 있기 때문에 XML을 처리하는 메서드가있는 계층 구조의 유일한 클래스입니다. XML에 대해 거의 가정 할 수없는 가장 광범위한 사례를 처리하려면 해당 수준에서 구현해야합니다.
xml을 XDocument에로드하고 Validate 확장 메소드를 사용하여 유효성 검사를하고 Linq to Xml을 사용하여 유효성을 검사하는 것이 적절한 지 고려해 볼 수 있습니다.
3
XML 데이터와 스키마를 메모리에 결합 할 수있는 방법이 있습니까? 스트림을 읽었습니까?
방법
static DataTable ParseXML(string xmlString)
{
DataSet ds = new DataSet();
byte[] xmlBytes = Encoding.UTF8.GetBytes(xmlString);
Stream memory = new MemoryStream(xmlBytes);
ds.ReadXml(memory);
return ds.Tables[0];
}
예 :
string xml = new XElement("inventory",
new XElement("item",
new XElement("name", "rock"),
new XElement("price", "5000")),
new XElement("item",
new XElement("name", "new car"),
new XElement("price", "1"))).ToString();
DataTable dt = ParseXML(xml);
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn col in dt.Columns)
Console.Write(row[col.ColumnName] + " | ");
Console.WriteLine();
}
관련 문제
- 1. 이되는 ReadXml 데이터 집합 방법
- 2. DataTable의 다양한 사전 데이터
- 3. JSatable, datatable의 데이터 테이블
- 4. 데이터 집합 ReadXML 메서드 스트림 대 문자열
- 5. 요소에 앰퍼샌드를 포함하는 URL이있는 .readxml
- 6. 핵심 데이터 태그 스키마?
- 7. 회원 제품 데이터 스키마
- 8. Spring 데이터 소스 및 데이터베이스 스키마
- 9. MS SQL 스키마 및 데이터 내보내기
- 10. 전체 데이터베이스 내용 복사 (스키마 및 데이터)
- 11. 데이터 이전 도구 및 스키마 이전 도구
- 12. Datatable의 대안
- 13. Null 예외 오류를 표시하는 ReadXml
- 14. DataTable의 LINQ
- 15. 메일 링리스트 데이터 스키마
- 16. 열 이름과 값으로 속성을 사용하는 Readxml
- 17. DataTable의 집계 기능 수행
- 18. xml 스키마 및 데이터를 DataSet (및 데이터 그램보기)에로드하십시오.
- 19. dataTable의 업데이트
- 20. DataTable의 정렬은
- 21. linq를 사용하는 DataTable의 차이
- 22. DataTable의 DataRow 상태 문제
- 23. DataTable의 AutoIncrement 열 재정렬
- 24. 다른 클래스의 데이터 집합 스키마 + 데이터 액세스
- 25. XML 스키마 : 데이터 유형 (텍스트 데이터 유형)
- 26. GAE 데이터 저장소에서 스키마 이전
- 27. SNMP 데이터 저장을위한 데이터베이스 스키마
- 28. h : dataTable의 이상한 동작
- 29. DataTable의 LINQ 쿼리
- 30. DataTable의 피벗 논리 LINQ
DaraTable/데이터 세트는 자신의 스키마, 당신은 함께 가져 오지 하나를 이해합니다. 스키마없이 사용해보십시오. –
DataSet이 스키마없이 데이터를 읽을 수있는 것처럼 보입니다. 하지만 내가 datatable 함께 시도하면 다음과 같은 오류가 발생했습니다. Datatable은 xml에서 스키마 유추를 지원하지 않습니다. –
"DataSet에서 데이터를 읽을 수 있습니다"- 문제가 해결 되었습니까? –