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

Tệp Xml này của tôi có vấn đề gì?DataTable không hỗ trợ suy luận lược đồ từ Xml.?

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

     return true; 
    } 

Trả lời

45

Hãy thử sử dụng một Dataset thay

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

Tìm thấy tại

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

+0

Tôi nghĩ rằng vấn đề có liên quan đến một bảng, không phải là một tập dữ liệu. Ngoài ra, đúng cách là thêm lược đồ vào bảng tùy chỉnh. – fcm

4

Hãy thử điều này, điều này sẽ làm việc:

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

này hoạt động

 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]; 
3

Nếu bạn là người viết bảng, bạn có thể giải quyết vấn đề này bằng cách viết giản đồ tại cùng một thời gian như bảng. Xem: http://msdn.microsoft.com/en-us/library/ms135456.aspx

+0

Bạn có thể muốn bao gồm một ví dụ trong trường hợp liên kết đó thay đổi. – cjbarth

0

OK, đây là "Tôi cũng vậy!" câu trả lời, tuy nhiên không có câu trả lời nào ở trên giải quyết vấn đề gritty nitty của câu hỏi.

Để xử lý đúng đắn vấn đề này, trước tiên hãy DataTable suy ra các giản đồ từ xml bằng cách gọi ReadXmlSchema phương pháp, tức là

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

    return true; 
} 

Bằng cách đó, giản đồ được infered từ XML mà bạn đang cố gắng tải và không có lỗi nào được ném!

+2

Điều này vẫn còn ném cùng một ngoại lệ "DataTable không hỗ trợ suy luận lược đồ từ Xml". – bouvierr

29

Nếu bạn đang đọc tệp XML từ DataTable.WriteXML, hãy đảm bảo bạn bao gồm XMLWriteMode.WriteSchema.

Ví dụ:

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

Bạn sẽ nghĩ rằng nó nên viết lược đồ theo mặc định nếu ReadXml yêu cầu nó !!! Cảm ơn. – CathalMF

+0

Cảm ơn Mark! Điều này sẽ được đánh dấu là câu trả lời thực tế. DataTable không biết lược đồ trừ khi nó được đưa vào xuất khẩu ban đầu. Một cách khác để giải quyết vấn đề này là tạo lược đồ theo cách thủ công khi tạo đối tượng DataTable, và sau đó đọc trong dữ liệu từ XML. –

Các vấn đề liên quan