0

データセットに 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」として 2 番目のテーブル (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();

ありがとう。

4

2 に答える 2

1

DataSet.WriteXml希望する方法で XML を記述するように直接指示する方法がわかりません。そのため、次の 2 つの大きなオプションがあります。

  • XMLDataSet.WriteXmlを作成し、後で変更します。
  • シリアライゼーション コードを自分で記述します。

どちらの方法でも、それを行う方法が異なります。最初のケースでは、次のことができます

  • 作成した XML をXDocumentorに読み込み、XmlDocumentコードで再構築します。
  • XSLT を介して XML を変換します (コード ソリューションよりもそれをお勧めします)。

2 番目のケースのオプションは明らかです。独自のフォーマットを作成して書き込みにXmlWriter使用DataTable.WriteXmlする場合、数行のコードで独自のフォーマットを定義できるはずです。

ユースケースに適したソリューションを選択するのはあなた次第です。私はおそらく XSTL ソリューションを選びます。

于 2012-10-15T08:07:42.193 に答える
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");
于 2012-10-15T07:36:43.113 に答える