为包含多个表的数据集编写XML

时间:2012-10-15 07:24:24

标签: c# asp.net xml

我的数据集中有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();

感谢。

2 个答案:

答案 0 :(得分:1)

我不知道如何直接告诉DataSet.WriteXml以您希望的方式编写XML,因此您有两个很大的选择:

  • DataSet.WriteXml编写XML并在之后修改它。
  • 自己编写序列化代码。

对于这两种方式,您可以选择不同的方法。在第一种情况下你可以

  • 将创建的XML加载到XDocumentXmlDocument并通过代码对其进行重组。
  • 通过XSLT转换XML(我希望通过代码解决方案)

第二种情况中的选项应该是显而易见的。如果您创建自己的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");