3

重複の可能性:
データテーブルをカスタマイズされたXMLに変換する別の方法

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Product_ID", Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("Product_Name", Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("product_Price", Type.GetType("System.Int32")));
fillRows("hello1", dt, "product1", 1111);
fillRows("hello2", dt, "product2", 2222);
fillRows("hello3", dt, "product3", 3333);
fillRows("hello4", dt, "product4", 4444);


var xmlColumnZero = dt.AsEnumerable().Select(col => col[0].ToString()).ToArray() ; // row 0 turnovermultiplieer
var xmlRowZero = dt.Columns;
string firstColumnHeader = dt.Columns[0].ToString();
// XmlDocument xmldoc = new XmlDocument();
XmlWriter writer = XmlWriter.Create("employees.xml");
writer.WriteStartDocument();
writer.WriteStartElement("Employees");

// XmlElement first = xmldoc.CreateElement("Order");
//xmldoc.AppendChild(first);
foreach (DataColumn dc  in dt.Columns ) 
{

    if (dc.ToString() == firstColumnHeader) continue;
    string firstcol = dc.ToString();
    writer.WriteStartElement(firstcol);
    // XmlElement colRoot = xmldoc.CreateElement(firstcol);
    //first.AppendChild(colRoot);
    for (int i = 0 ; i <dt.Rows.Count && i< xmlColumnZero.Length ; i++)
    {
        string firstrow = xmlColumnZero[i];
        string dtagaga = dt.Rows[i][dc].ToString();
        writer.WriteElementString(firstrow, dtagaga);
       // XmlElement rowRoot = xmldoc.CreateElement(firstrow, dtagaga);
        //colRoot.AppendChild(rowRoot);


    }
    writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();

XMLWriterを作成しているときに、XMlを文字列に格納したいと思います。

テーブルからxmlを作成する別の方法はありますか

XMLは次のようになります

xml writerメソッドは、すべてをプログラムの場所にあるxmlファイルに格納します。文字列を保存したい

<Employees>
<Product_Name>
<hello1>product1</hello1>
hello2>product2</hello2>
hello3>product3</hello3>
hello4>product4</hello4>
</product_name>
<product_Price>
<hello1>1111</hello1>
hello2>2222</hello2>
hello3>3333</hello3>
hello4>4444</hello4>
</product_Price>
</Employees>
4

3 に答える 3

4

オーバーロードされたメソッドXmlWriter.Create(StringBuilder output)を使用してxml文字列を作成するだけです。この場合、すべての出力はStringBuilderファイルではなく書き込まれます。

StringBuilder builder = new StringBuilder();
XmlWriter writer = XmlWriter.Create(builder);
//... build xml here

string xml = builder.ToString();

MemoryStreamまた、を使用してxmlを書き込むこともできますXmlWriter.Create(Stream output)

Stream stream = new MemoryStream();
XmlWriter writer = XmlWriter.Create(stream);
// ... build xml here

stream.Position = 0;
string xml = new StreamReader(stream).ReadToEnd();

アップデート

以下の拡張メソッドは、xml文字列を生成します。デフォルトでは、要素名として最初の列を使用しますが、メタデータを含む列の任意の列インデックスを渡すことができます。また、テーブル名を使用して「Employees」タグを生成しているので、データテーブルを作成するときに名前を指定しますDataTable dt = new DataTable("Employees");

public static string ToXml(this DataTable table, int metaIndex = 0)
{
    XDocument xdoc = new XDocument(
        new XElement(table.TableName,
            from column in table.Columns.Cast<DataColumn>()
            where column != table.Columns[metaIndex]
            select new XElement(column.ColumnName,
                from row in table.AsEnumerable()
                select new XElement(row.Field<string>(metaIndex), row[column])
                )
            )
        );

    return xdoc.ToString();
}

使用法は非常に簡単です:

string xml = dt.ToXml();

出力:

<Employees>
  <Product_Name>
    <hello1>product1</hello1>
    <hello2>product2</hello2>
    <hello3>product3</hello3>
    <hello4>product4</hello4>
  </Product_Name>
  <product_Price>
    <hello1>111</hello1>
    <hello2>222</hello2>
    <hello3>333</hello3>
    <hello4>444</hello4>
  </product_Price>
</Employees>
于 2012-11-09T17:55:14.077 に答える
1

を使用して、ファイルの代わりにを使用しStringBuilder作成します。XmlWriterStringBuilder

StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb);
writer.WriteStartDocument();
//...
writer.WriteEndDocument();
var myXmlString = sb.ToString(); //myXmlString will contain the XML
于 2012-11-09T17:55:15.660 に答える
1

ファイルを作成する代わりに

XmlWriter writer = XmlWriter.Create("employees.xml");

文字列ストリームを使用できます

StringWriter sw = new StringWriter();
XmlWriter writer = XmlWriter.Create(sw);
...
...
// sw.ToString(); // string output
于 2012-11-09T17:57:23.030 に答える