OuterXML ändern - eventuell durch el.OuterXml.Replace()


domeemod

Grünschnabel
#1
Hallo zusammen ich habe eine XML Struktur für die Generierung einer Rechnungsliste.

Bild 1.png

Die einzelnen Rechnungspositionen werden so gelistet per XML:

XML:
        <table:table-row posnr="19">

          <table:table-cell table:style-name="Positionen.A2" office:value-type="string">

            <text:p text:style-name="P41">

              <text:span text:style-name="T15">19 / 50020</text:span>

            </text:p>

          </table:table-cell>

          <table:table-cell table:style-name="Positionen.B2" office:value-type="string">

            <text:p text:style-name="P41">

              <text:span text:style-name="T15">Kopfverbindung 6 automatik</text:span>

            </text:p>

          </table:table-cell>

          <table:table-cell table:style-name="Positionen.B2" office:value-type="string">

            <text:p text:style-name="P42">

              <text:span text:style-name="T15">1,00</text:span>

            </text:p>

          </table:table-cell>

          <table:table-cell table:style-name="Positionen.B2" office:value-type="string">

            <text:p text:style-name="P42">

              <text:span text:style-name="T15">Stück</text:span>

            </text:p>

          </table:table-cell>

          <table:table-cell table:style-name="Positionen.B2" office:value-type="string">

            <text:p text:style-name="P42">

              <text:span text:style-name="T15">3,20 €</text:span>

            </text:p>

          </table:table-cell>

          <table:table-cell table:style-name="Positionen.F2" office:value-type="string">

            <text:p text:style-name="P21">

              <text:span text:style-name="T15">3,20 </text:span> €</text:p>

          </table:table-cell>

        </table:table-row>
Nun möchte ich hier eben nach der Position 19 (in dem Fall hier - spielt für das Problem aber keine Rolle), da eine neue Seite ansteht eine Zwischensumme einfügen.

Das mache ich momentan erfolglos so:

C#:
                        //erzeugt die Zeile mit der Zwischensumme
                        string zwischensumme = generiere_Tabelle_Zwischensumme(summe);
                        xml_file.Load(anwendungspfad + "\\odt\\content.xml");
                        //ermittelt an welcher Position die Zwischensumme eingeschoben werden soll
                        query = string.Format("//*[@posnr='{0}']", 23 - (zeilen_vorwort + anzahl_details));
                        el = (XmlElement)xml_file.SelectSingleNode(query);
                        //das neue OuterXml
                        string position_mit_zwischensumme = el.OuterXml + zwischensumme;
                        el.OuterXml.Replace(el.OuterXml, position_mit_zwischensumme);
                        xml_file.Save(anwendungspfad + "\\odt\\content.xml");
Idee:
Rechnungsposition finden -> klappt
OuterXml anpassen durch anhängen mit der neuen Zeile ( <table:table-row>) mit der Zwischensumme -> klappt nicht per C#.
Ändern per Hand in der XML geht.
Die Methode Replace klappt nicht.
el.OuterXml ist nach Aufruf der Methode identisch wie zuvor, also ohne angehängtem Code.

Die Methode generiere Zwischensumme:
C#:
private string generiere_Tabelle_Zwischensumme(decimal summe)
        {
            //Tabellenende mit Zwischensumme                    
            string zwischensumme = "";
            zwischensumme +=

                "<table:table-row>"
                    + "<table:table-cell table:style-name=\"Positionen.A2\" office:value-type=\"string\">"
                        + "<text:p text:style-name=\"P23\">"
                            + "<text:span text:style-name=\"T9\">-</text:span>"
                        + "</text:p>"
                    + "</table:table-cell>"
                    + "<table:table-cell table:style-name=\"Positionen.B2\" office:value-type=\"string\">"
                        + "<text:p text:style-name=\"P23\">"
                            + "<text:span text:style-name=\"T9\">Zwischensumme:</text:span>"
                        + "</text:p>"
                    + "</table:table-cell>"
                    + "<table:table-cell table:style-name=\"Positionen.B2\" office:value-type=\"string\">"
                        + "<text:p text:style-name=\"P23\">"
                            + "<text:span text:style-name=\"T9\">-</text:span>"
                        + "</text:p>"
                    + "</table:table-cell>"
                    + "<table:table-cell table:style-name=\"Positionen.B2\" office:value-type=\"string\">"
                        + "<text:p text:style-name=\"P23\">"
                            + "<text:span text:style-name=\"T9\">-</text:span>"
                        + "</text:p>"
                    + "</table:table-cell>"
                    + "<table:table-cell table:style-name=\"Positionen.B2\" office:value-type=\"string\">"
                        + "<text:p text:style-name=\"P23\">"
                            + "<text:span text:style-name=\"T9\">-</text:span>"
                        + "</text:p>"
                    + "</table:table-cell>"
                     + "<table:table-cell table:style-name=\"Positionen.F2\" office:value-type=\"string\">"
                        + "<text:p text:style-name=\"P23\">"
                            + "<text:span text:style-name=\"T9\">" + Math.Round(summe, 2) + " €</text:span>"
                        + "</text:p>"
                     + "</table:table-cell>"
                + "</table:table-row>";

            return zwischensumme;
        }
Wenn ich XML manuell anpasse funktioniert es.
Nur bekomme ich in C# (Visual Studio 2008) nicht die OuterXml geändert.

Hoffe, dass ich das Problem klar dargestellt habe. Wenn was unklar ist einfach fragen.
Hoffe ihr könnt mir helfen. Ist der Ansatz richtig? Denke, aber das passt.


Gruß
domeemod