我在C#Visual Studio 2010中有以下代码。
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Database\\db.mde";
string sql = "SELECT * FROM Customer";
OleDbConnection connection = new OleDbConnection(connectionString);
OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection);
DataSet ds = new DataSet();
connection.Open();
adapter.Fill(ds, "Test Table");
connection.Close();
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Test Table";
ds.WriteXml("C:\\Users\\Desktop\\testfile.XML");
现在它可以完成我想要的一切,但我需要在导出时稍微修改XML文件的格式。这可以轻松完成吗?我收集我需要提供一个很好的模式文件,但我不确定如何使用数据集实现它。
目前XML看起来像这样。
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Test_x0020_Table>
<name>Customer1</name>
<address>25 Big St</address>
<suburb>Sydney NSW</suburb>
<contact>Fred Nurk</contact>
<phone>11 1111 1111</phone>
</Test_x0020_Table>
</NewDataSet>
...但我希望它看起来像这样
<?xml version="1.0" standalone="yes"?>
<Customers>
<name>Customer1</name>
<address>25 Big St</address>
<suburb>Sydney NSW</suburb>
<contact>Fred Nurk</contact>
<phone>11 1111 1111</phone>
</Customers>
非常感谢任何帮助。
答案 0 :(得分:2)
第一个节点是表的名称。
您可以通过在数据集上设置名称来更改此设置。
DataSet ds = new DataSet(“ Customers ”); //复数
内部节点是记录。
您可以通过在填充适配器时指定名称来更改此项。
adapter.Fill(ds,“客户”); //奇异
这会给你一个结果:
<Customers> <Customer> <name>Customer1</name> <address>25 Big St</address> <suburb>Sydney NSW</suburb> <contact>Fred Nurk</contact> <phone>11 1111 1111</phone> </Customer> </Customers>
这意味着如果您返回多个结果,最终会得到:
<Customers> <Customer> <name>Customer1</name> <address>25 Big St</address> <suburb>Sydney NSW</suburb> <contact>Fred Nurk</contact> <phone>11 1111 1111</phone> </Customer> <Customer> <name>Customer1</name> <address>25 Big St</address> <suburb>Sydney NSW</suburb> <contact>Fred Nurk</contact> <phone>11 1111 1111</phone> </Customer> <Customer> <name>Customer1</name> <address>25 Big St</address> <suburb>Sydney NSW</suburb> <contact>Fred Nurk</contact> <phone>11 1111 1111</phone> </Customer> </Customers>
您不能拥有一个“客户”,因为当您编写XML时,它会将其格式化为“表格”并带有“记录”。
答案 1 :(得分:1)
这样的事情怎么样:
using (MemoryStream ms = new MemoryStream())
{
ds.WriteXml(ms);
XDocument doc = XDocument.Load(ms);
// change XML using doc
doc.Save("C:\\Users\\Desktop\\testfile.XML");
}
- 编辑 -
这是我创建的一个关于如何使用LINQ转换为XML的xml的小测试:
private void XmlTest()
{
String xml = "<NewDataSet><Test_x0020_Table><name>Customer1</name><address>25 Big St</address><suburb>Sydney NSW</suburb><contact>Fred Nurk</contact><phone>11 1111 1111</phone></Test_x0020_Table></NewDataSet>";
XDocument doc = XDocument.Parse(xml);
XElement element = doc.Descendants("Test_x0020_Table").First();
XElement newElement = new XElement("Customers", element.Descendants());
MessageBox.Show(newElement.ToString());
}
使用上面的代码来操作xml并使用doc.Save()
方法保存它。
答案 2 :(得分:1)
假设您的XML始终具有类似于
的结构<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Test_x0020_Table>
<name>Customer1</name>
<address>25 Big St</address>
<suburb>Sydney NSW</suburb>
<contact>Fred Nurk</contact>
<phone>11 1111 1111</phone>
</Test_x0020_Table>
</NewDataSet>
您可以这样做:
string XMLPath = "C:\\Users\\Desktop\\testfile.XML";
XDocument XMLPreModification = new XDocument.Load(XMLPath);
XDocument XMLModified = new XDocument;
XMLDoified.Add(New XElement("Customers", XMLPreModification.Descendants.Descendants()));
XMLModified.Save(XMLPath);
这只是制作一个新的XDocument,添加一个Customer元素并将所需的节点插入该元素,然后将其保存到文件中。