我的数据集中有2个表。
我需要将我的XML构造为:
<MyRoot>
<Settings>
<Param1>value1</Param1>
<Param2>value2</Param2>
<Param3>value3</Param3>
</Settings>
<Books>
<Book>
<BookId>1000</BookId>
<BookName>Book1</BookName>
</Book>
<Book>
<BookId>2000</BookId>
<BookName>Book2</BookName>
</Book>
</Books>
</MyRoot>
但是当我使用datSet.WriteXML();我正在将XML作为:
<MyRoot>
<Settings>
<Param1>value1</Param1>
<Param2>value2</Param2>
<Param3>value3</Param3>
</Settings>
<Book>
<BookId>1000</BookId>
<BookName>Book1</BookName>
</Book>
<Book>
<BookId>2000</BookId>
<BookName>Book2</BookName>
</Book>
</MyRoot>
因此,我无法将单独的数据集名称作为“Books”添加到第二个表(dataSet.Tables [1])。有什么方法可以做到吗?
我尝试了以下代码:
dataSet = GetList();
dataSet.DataSetName = "MyRoot";
dataSet.Tables[0].TableName = "Settings";
dataSet.Tables[1].TableName = "Books";
StringWriter swriter = new StringWriter();
dataSet.WriteXml(swriter);
string dsResult = swriter.ToString();
感谢。
答案 0 :(得分:1)
我不知道如何直接告诉DataSet.WriteXml
以您希望的方式编写XML,因此您有两个很大的选择:
DataSet.WriteXml
编写XML并在之后修改它。对于这两种方式,您可以选择不同的方法。在第一种情况下你可以
XDocument
或XmlDocument
并通过代码对其进行重组。第二种情况中的选项应该是显而易见的。如果您创建自己的XmlWriter
并使用DataTable.WriteXml
写入,则应该可以在几行代码中定义自己的格式。
为您的用例选择合适的解决方案取决于您。我可能会选择XSTL解决方案。
答案 1 :(得分:0)
您可以通过以下某些代码覆盖原始XML。
string filename = "XmlDoc.xml";
System.IO.FileStream stream = new System.IO.FileStream (filename, System.IO.FileMode.Create);
ds.WriteXml(stream);
XmlDocument xmldoc = new XmlDocument("XmlDoc.xml");
XmlNode node1 = xmldoc.CreateNode("Books","Books");
foreach(XmlNode nd in xmldoc.Nodes) {
if(node.value =="Book")
node1.AppendChild(nd);
}
xmldoc.Nodes.Add(node1);
xmldoc.SaveAs("newXmlDoc.Xml");