Domanda

Ciao voglio copiare un file XML e di inserimento in un elemento specifico locaiton alcuni più elementi; Qual è il modo migliore e più facile fare questo. Posso usare xmlReader leggere gli elementi e una scrittura da un riferimento ad ogni tipo- Ho avuto alcuni problemi con questo, ma oltre a questo mi sembra troppo lavoro poltiglia che può essere fatto in qualche modo migliore. nell'esempio qui sotto ho l'XML come necessità definizione di default per creare un nuovo XML nello stesso formato con l'inserimento di nuovi valori sheet1 -. ma dopo le righe esistenti, e fare lo stesso per 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>
È stato utile?

Soluzione

semplice modo a mio avviso potrebbe essere quella di caricare l'intero documento utilizzando LINQ to XML, modificarlo, quindi salvarlo di nuovo. Questo è probabile che sia più facile che usare XmlReader, che può diventare un po 'pelosa nella mia esperienza.

Tuttavia, ciò comporta carico tutto in memoria - che potrebbe essere un problema se i documenti sono enormi. È che probabile che sia un problema?

EDIT: Ecco un breve esempio in LINQ to XML (non testato):

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"));

Un'alternativa a l'ultima parte, se si desidera solo il nuovo contenuto dopo tutto il vecchio contenuto del foglio:

sheet1.Add(new XElement("Foo", "Extra value"));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top