0

この XML に問題があります。このシステムでは、DataSet ( ds.GetXml()) からの XML を使用し、それを文字列として 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);
        }
    }
}
4

0 に答える 0