2009-12-20 2 views
30
<?xml version="1.0" encoding="utf-8"?> 
<PHP_Adapter> 
    <Adapter> 
    <ID>11</ID> 
    <Provider>22</Provider> 
    <Connectstring>33</Connectstring> 
    </Adapter> 
</PHP_Adapter> 

내 XML 파일이 잘못 되었나요?DataTable은 XML에서 스키마 유추를 지원하지 않습니다.

bool CheckAdapterExist(string aid) 
    { 
     DataTable dt = new DataTable(); 
     dt.ReadXml(axml); 
     MessageBox.Show(dt.Rows[0]["ID"].ToString()); 

     return true; 
    } 

답변

45

오히려

DataSet ds = new DataSet(); 
ds.ReadXml(@"d:\test.xml"); 
MessageBox.Show(ds.Tables[0].Rows[0]["ID"].ToString()); 

DataTable.ReadXml(filename) throws an error. Why?

+0

내가 질문 테이블이 아닌 데이터 세트에 관련이 있다고 생각합니다. 또한 올바른 방법은 사용자 지정 테이블에 스키마를 추가하는 것입니다. – fcm

4

이 시도에서 발견 데이터 집합를 사용해보십시오이 작동합니다 :

System.Xml.XmlTextReader reader = 
       new System.Xml.XmlTextReader(@"C:\Users\Mayank\Documents\Projects\XMLTEST\XMLTEST\XMLFile1.xml"); 
      DataSet newTable = new DataSet(); 
      newTable.ReadXml(reader); 
      DataTable _dt=newTable.Tables[0]; 
7

이 테이블을 작성하는 사람이 있다면, 당신은 테이블과 같은 시간에 스키마를 작성하여이 문제를 해결할 수

 string XML = @" 
      <MyTable> 
      <MyRecord> 
       <Col_1>test</Col_1> 
       <Col_2>1234</Col_2> 
      </MyRecord> 
      <MyRecord> 
       <Col_1>Record 2</Col_1> 
       <Col_2>2</Col_2> 
      </MyRecord> 
      </MyTable> 
     "; 
     DataSet DS = new DataSet(); 
     DS.ReadXml(new StringReader(XML)); 

     DataTable DT=DS.Tables[0]; 
0

확인, 이것은 "나도!" 대답,하지만 위의 답변 중 아무도 질문의 핵심 껄끄 러울 주소.

가 제대로 먼저 DataTable에이

bool CheckAdapterExist(string aid) 
{ 
    DataTable dt = new DataTable(); 
    dt.ReadXmlSchema(axml); 
    dt.ReadXml(axml); 
    MessageBox.Show(dt.Rows[0]["ID"].ToString()); 

    return true; 
} 

즉, ReadXmlSchema에게 메서드를 호출하여 그 방법을 XML의 스키마를 추론하게 문제를 처리하기 위해 스키마는 XML에서 infered 있음을 로드하려고하고 오류가 발생하지 않습니다!

+2

이것은 여전히 ​​"DataTable이 XML에서 스키마 유추를 지원하지 않습니다"라는 동일한 예외를 throw합니다. – bouvierr

29

XML 파일을 DataTable.WriteXML에서 읽는 경우 XMLWriteMode.WriteSchema을 포함해야합니다.

예 :

Table.WriteXml(DataFilePath, XmlWriteMode.WriteSchema); 
+1

ReadXml에 필요하면 기본적으로 스키마를 작성해야한다고 생각할 것입니다 !!! 감사. – CathalMF

+0

감사 마크! 이것은 실제 답변으로 표시되어야합니다. DataTable은 원본 내보내기에 포함되어 있지 않으면 스키마를 알지 못합니다. 이 문제를 해결할 수있는 다른 방법은 DataTable 개체를 만들 때 스키마를 수동으로 만들고 XML에서 데이터를 읽는 것입니다. –