प्रश्न: मैं एक सिस्टम निर्यात कर रहा हूं। डेटा। डेटा को XML में सक्षम। अभी तक यह ठीक काम करता है। लेकिन मैं विशेषताओं में सभी डेटा रखना चाहता हूं, जो ठीक काम करता है। लेकिन मेरी समस्या अब, यदि एक कॉलम में, सभी पंक्तियां पूर्ण हैं, तो कोई खाली विशेषता नहीं लिखी जाती है। तो यदि मैं XML को वापस डेटाटेबल पर पढ़ता हूं, तो इसमें इस कॉलम की कमी है ...सभी स्तंभों के साथ एक्सएमएल के लिए डेटाटेबल को गुणों के रूप में कैसे निर्यात करें?
मैं खाली होने पर भी सभी कॉलम लिखने के लिए मजबूर कैसे कर सकता हूं?
(डेटाप्रकार नहीं necessarely स्ट्रिंग)
public void ExportTable(string strDirectory, DataTable dtt)
{
using (System.Data.DataSet ds = new System.Data.DataSet()) {
string strTable = dtt.TableName;
ds.Tables.Add(dtt);
ds.DataSetName = strTable;
// Move data to attributes
foreach (DataTable dt in ds.Tables) {
foreach (DataColumn dc in dt.Columns) {
dc.ColumnMapping = MappingType.Attribute;
}
}
System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
settings.Indent = true;
//settings.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-1")
settings.Encoding = System.Text.Encoding.UTF8;
settings.CloseOutput = true;
settings.CheckCharacters = true;
settings.NewLineChars = "\r\n";
// vbCr & vbLf
// Write as UTF-8 with indentation
using (System.Xml.XmlWriter w = System.Xml.XmlWriter.Create(System.IO.Path.Combine(strDirectory, strTable + ".xml"), settings)) {
// Strip out timezone
foreach (DataTable dt in ds.Tables) {
foreach (DataColumn dc in dt.Columns) {
if (object.ReferenceEquals(dc.DataType, typeof(DateTime))) {
dc.DateTimeMode = DataSetDateTime.Unspecified;
}
}
}
ds.Tables[0].WriteXml(w, XmlWriteMode.IgnoreSchema);
w.Flush();
w.Close();
}
// w
}
// ds
}
// ExportTable
VB.NET मूल:
Public Sub ExportTable(strDirectory As String, dtt As DataTable)
Using ds As New System.Data.DataSet()
Dim strTable As String = dtt.TableName
ds.Tables.Add(dtt)
ds.DataSetName = strTable
' Move data to attributes
For Each dt As DataTable In ds.Tables
For Each dc As DataColumn In dt.Columns
dc.ColumnMapping = MappingType.Attribute
Next dc
Next dt
Dim settings As New System.Xml.XmlWriterSettings()
settings.Indent = True
'settings.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-1")
settings.Encoding = System.Text.Encoding.UTF8
settings.CloseOutput = True
settings.CheckCharacters = True
settings.NewLineChars = vbCrLf ' vbCr & vbLf
' Write as UTF-8 with indentation
Using w As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(System.IO.Path.Combine(strDirectory, strTable & ".xml"), settings)
' Strip out timezone
For Each dt As DataTable In ds.Tables
For Each dc As DataColumn In dt.Columns
If dc.DataType Is GetType(DateTime) Then
dc.DateTimeMode = DataSetDateTime.Unspecified
End If
Next dc
Next dt
ds.Tables(0).WriteXml(w, XmlWriteMode.IgnoreSchema)
w.Flush()
w.Close()
End Using ' w
End Using ' ds
End Sub ' ExportTable
XmlWriteMode.WriteSchema का उपयोग करें। एक स्कीमा शामिल के साथ यह कोई फर्क नहीं पड़ता कि यह शून्य मानों के लिए विशेषताओं को जोड़ नहीं है। – JamieSee
@JamieSee: स्कीमा के बिना अच्छा होगा, क्योंकि परिणाम किसी भी प्रोग्रामिंग भाषा में पढ़ना आसान नहीं होना चाहिए, न कि सिर्फ .NET। –