2009-12-20 13 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 से स्कीमा अनुमान का समर्थन नहीं करता है।

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

काम करता है आप एक तालिका लेखन कर रहे हैं, तो आप तालिका के रूप में एक ही समय में स्कीमा लिख ​​कर इस समस्या का समाधान कर सकते हैं। देखें: http://msdn.microsoft.com/en-us/library/ms135456.aspx

+0

यदि लिंक कभी भी बदलता है तो आप एक उदाहरण शामिल करना चाहेंगे। – cjbarth

0

ठीक है, यह एक "मैं भी है!" जवाब, हालांकि ऊपर दिए गए उत्तरों में से कोई भी सवाल की नीची किरदार को संबोधित नहीं करता है।

ठीक से मुद्दे को सुलझाने के लिए, पहले DataTable, इस तरह ReadXmlSchema विधि को फोन करके एक्सएमएल से स्कीमा का अनुमान लगा यानी

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

    return true; 
} 

करते हैं, स्कीमा XML से infered जाती है कि आप लोड करने की कोशिश कर रहे हैं और कोई त्रुटि फेंक दी गई है!

+2

यह अभी भी एक ही अपवाद फेंकता है "डेटाटेबल Xml से स्कीमा अनुमान का समर्थन नहीं करता है"। – bouvierr

29

यदि आप फ़ाइल DataTable.WriteXML से पढ़ रहे हैं, तो सुनिश्चित करें कि आप XMLWriteMode.WriteSchema शामिल हैं।

उदाहरण:

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

आपको लगता है कि रीडएक्सएमएल को इसकी आवश्यकता होने पर इसे डिफ़ॉल्ट रूप से स्कीमा लिखना चाहिए !!! धन्यवाद। – CathalMF

+0

धन्यवाद मार्क! इसे वास्तविक उत्तर के रूप में चिह्नित किया जाना चाहिए। डेटाटेबल स्कीमा को तब तक नहीं जानता जब तक कि इसे मूल निर्यात के साथ शामिल नहीं किया जाता है। इस समस्या को हल करने का एक और तरीका डेटाटेबल ऑब्जेक्ट बनाते समय मैन्युअल रूप से स्कीमा बनाना है, और फिर XML से डेटा में पढ़ना है। –

संबंधित मुद्दे