Hallo zusammen ich habe eine XML Struktur für die Generierung einer Rechnungsliste.

Die einzelnen Rechnungspositionen werden so gelistet per XML:
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:
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:
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

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