2008-09-09 7 views
6

में एक्सएमएल फ़ाइल पढ़ने का मुद्दा मुझे एक .xml फ़ाइल दी गई थी जिसे मुझे डेटासेट के रूप में मेरे कोड में पढ़ने की आवश्यकता थी (पृष्ठभूमि के रूप में, फ़ाइल को DataSet सी # में बनाकर बनाया गया था और dataSet.WriteXml(file, XmlWriteMode.IgnoreSchema) पर कॉल किया गया था, लेकिन यह किया गया था किसी और से)।सी # डेटासेट

.xml फ़ाइल इस तरह के आकार का था:

<?xml version="1.0" standalone="yes"?> 
<NewDataSet> 
    <Foo> 
    <Bar>abcd</Bar> 
    <Foo>efg</Foo> 
    </Foo> 
    <Foo> 
    <Bar>hijk</Bar> 
    <Foo>lmn</Foo> 
    </Foo> 
</NewDataSet> 

सी # और .NET 2.0 का उपयोग करना, मैं नीचे दिए गए कोड का उपयोग करने में फ़ाइल को पढ़ने:

 DataSet ds = new DataSet(); 
     ds.ReadXml(file); 

एक ब्रेकप्वाइंट का उपयोग करना, इस के बाद line ds.Tables[0] इस तरह दिख रहा था (अंडरस्कोर के स्थान पर डैश का उपयोग करके जिसे मैं ठीक से प्रारूपित नहीं कर सका):

Bar  Foo-Id Foo-Id-0 
abcd  0   null 
null  1   0 
hijk  2   null 
null  3   2 

मुझे एक वर्कअराउंड मिला है (मुझे पता है कि बहुत सारे हैं) और .xml में सफलतापूर्वक पढ़ने में सक्षम हैं, लेकिन मैं यह समझना चाहता हूं कि ds.ReadXml(file) इस तरीके से क्यों किया गया, इसलिए मैं इस मुद्दे से बचने में सक्षम हूं भविष्य। धन्यवाद।

मेरा अनुमान है (यह अपने आप को फिर से निर्माण करने के लिए कोशिश कर के बिना) है कि चीजों में से एक जोड़ी के रूप डेटासेट 'समतल' के लिए एक सौपानिक संरचना की कोशिश करता हो रहा हो सकता है:

उत्तर

4

यह आपके नेस्टेड फू टैग के लिए सही प्रतीत होता है:

<NewDataSet> 
    <Foo>    <!-- Foo-Id: 0 --> 
    <Bar>abcd</Bar> 
    <Foo>efg</Foo> <!-- Foo-Id: 1, Parent-Id: 0 --> 
    </Foo> 
    <Foo>    <!-- Foo-Id: 2 --> 
    <Bar>hijk</Bar> 
    <Foo>lmn</Foo> <!-- Foo-Id: 3, Parent-Id: 2 --> 
    </Foo> 
</NewDataSet> 

तो यह सही ढंग से अपने परिणाम में 4 रिकॉर्ड हो जाता है, के एक अभिभावक-बच्चे कुंजी "फू-ईद-0"

साथ

प्रयास करें:

<NewDataSet> 
    <Rec>    <!-- Rec-Id: 0 --> 
    <Bar>abcd</Bar> 
    <Foo>efg</Foo> 
    </Rec> 
    <Rec>    <!-- Rec-Id: 1 --> 
    <Bar>hijk</Bar> 
    <Foo>lmn</Foo> 
    </Rec> 
</NewDataSet> 

कौन सा में परिणाम चाहिए:

Bar  Foo  Rec-Id 
abcd efg  0 
hijk lmn  1 
0

ये एक पूरा जवाब के बजाय मेरी टिप्पणियों हैं एक संबंधपरक डेटा संरचना के लिए।

1) एक संबंधपरक डेटाबेस परिप्रेक्ष्य से डेटा के बारे में सोचना; संग्रह में प्रत्येक Foo तत्वों की पहचान करने के लिए कोई स्पष्ट प्राथमिक कुंजी फ़ील्ड नहीं है, इसलिए डेटासेट ने फ़ाइल में ऑर्डिनल स्थिति स्वचालित रूप से Foo-Id नामक ऑटो-जेनरेटेड फ़ील्ड के रूप में उपयोग की है।

2) वास्तव में 'फू' नामक दो तत्व हैं, जो शायद 'फू-आईडी -0' कॉलम के लिए एक अजीब नाम की पीढ़ी को समझाते हैं (इसने स्तंभ के लिए एक अद्वितीय नाम स्वत: उत्पन्न किया है - मुझे लगता है आप इसे डेटासेट में गलती-सहिष्णु व्यवहार के रूप में सोच सकते हैं)।

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