从XML获取实际的列名称

时间:2013-07-03 10:38:56

标签: c# xml dataset silverlight-5.0

我对此XML有疑问。在我们的系统中,我们使用来自DataSet的XML(ds.GetXml())并将其作为字符串发送到我们的Silverlight应用程序。从那里我们用以下内容阅读XML:

StringReader stream = new StringReader(XmlData);
XmlReader reader = XmlReader.Create(stream);
XDocument myDoc = new XDocument();
myDoc = XDocument.Load(reader);

问题:有时会更改列名称,例如:如果列名以数字编号开头,则会将其转换。

"_x0033_column" original column name was "3column" 

是否可以从XML获取原始列名?

XML

<NewDataSet>
  <Table>
    <CheckboxCol>0</CheckboxCol>
    <Kunde>1</Kunde>    
    <Ort_x0020_Postfach /> 
    <erfasst_x0020_von>MasterMind</erfasst_x0020_von>   
    <Buchhaltungsnummer>1</Buchhaltungsnummer>
    <Kreditlimit>0.0000</Kreditlimit>
    <_x0033_STT_Inaktiv>Nein</_x0033_STT_Inaktiv>
    <_x0033_STT_Status>Interessent</_x0033_STT_Status>
    <Zahlungsbedingungen>10 : 10 Tage Netto</Zahlungsbedingungen>    
  </Table>
  <Table>
    <CheckboxCol>0</CheckboxCol>
    <Kunde>3</Kunde>   
    <Ort_x0020_Postfach />    
    <erfasst_x0020_von>MasterMind</erfasst_x0020_von>
    <Buchhaltungsnummer>3</Buchhaltungsnummer>
    <Kreditlimit>0.0000</Kreditlimit>
    <_x0033_STT_Inaktiv>Nein</_x0033_STT_Inaktiv>
    <_x0033_STT_Status>Kunde</_x0033_STT_Status>
    <Zahlungsbedingungen>10 : 10 Tage Netto</Zahlungsbedingungen>
  </Table>
<NewDataSet>

我当前的代码

public SLDataTable(string XmlData, Dictionary<string, string> ColumnDict)
{
    ColumnDefination = ColumnDict;

    foreach (var Item in ColumnDefination)
    {
        Columns.Add(new SLDataColumn() { ColumnName = Item.Key.ToString().Trim(), DataType = GetNullableType(GetColumnType(Item.Value.ToString())) });
    }

    StringReader stream = new StringReader(XmlData);
    XmlReader reader = XmlReader.Create(stream);

    XDocument myDoc = new XDocument();
    myDoc = XDocument.Parse(XmlData);

    if (myDoc != null && myDoc.Elements().Count() > 0 && myDoc.Element("NewDataSet").Elements().Count() > 0)
    {
        int columnCount = myDoc.Element("NewDataSet").Element("Table").Elements().Count();
        int rowCount = myDoc.Element("NewDataSet").Elements().Count();
        string ElmentColumnName = string.Empty;

        foreach (XElement element in myDoc.Element("NewDataSet").Elements())
        {

            var row = new SLDataRow(this);

            foreach (XElement ele in element.Elements())
            {
                ElmentColumnName = ele.Name.ToString().Replace("_x0020_", " ").Replace("_x0028_", " (").Replace("_x0029_", ") ");               
                row[ElmentColumnName] = ConvertValue(ElmentColumnName, ele.Value);
            }
            Rows.Add(row);
        }
    }
}

0 个答案:

没有答案