2

こんにちは私はxmlファイルをコピーして、特定の要素の場所にさらにいくつかの要素を挿入したいと思います。これを行うための最良かつ最も簡単な方法は何ですか。xmlReaderの読み取り要素を使用して、すべてのタイプを参照して1つずつ書き込むことができます。これにはいくつかの問題がありましたが、これに加えて、どういうわけかうまくできるあまりにも多くの作業があります。以下の例では、デフォルトの定義としてxmlがあり、sheet1に新しい値を挿入して同じ形式で新しいxmlを作成する必要がありますが、既存の行の後に、sheet2に対して同じことを行います。

<book>
   <Sheet ss:name="Sheet1">
      <Table >
      <Row >
        <Cell/>
        <Cell>
             Title Name      
        </Cell>
        <Cell >
             Title Description
         </Cell>
      </Row>
   </Sheet>
<a/>
<b/>
  <Sheet ss:name="Sheet2">
      <Table >
      <Row >
        <Cell/>
        <Cell>
             Title Name      
        </Cell>
        <Cell >
             Title Description
         </Cell>
      </Row>
   </Sheet>
</book>
4

1 に答える 1

7

私の見解で最も簡単な方法は、LINQ to XMLを使用してドキュメント全体をロードし、変更してから、再度保存することです。これは、を使用するよりも簡単である可能性がありますXmlReader。これは、私の経験では多少毛むくじゃらになる可能性があります。

ただし、これにはすべてをメモリにロードすることが含まれます。これは、ドキュメントが巨大な場合に問題になる可能性があります。それは問題になる可能性がありますか?

編集:これはLINQ to XMLの短い例です(テストされていません):

XDocument doc = XDocument.Load("test.xml");
XNamespace ss = "http://url/for/ss";
Sheet sheet1 = doc.Descendants("Sheet")
                  .Where(x => (string) x.Attribute(ss + "name") == "Sheet1");
XElement lastRow = sheet1.Elements("Row").LastOrDefault();
// Note: if there aren't any rows, lastRow will be null here. Handle accordingly
lastRow.AddAfterSelf(new XElement("Foo", "Extra value"));

シートのすべての古いコンテンツの後に新しいコンテンツが必要な場合は、最後の部分の代わりに次のようにします。

sheet1.Add(new XElement("Foo", "Extra value"));
于 2010-05-07T12:43:14.223 に答える