<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[PugiXML insert_child_after Leerzeilen in altem Child]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein problem bei insert_child_after</p>
<p>ich erstelle mit mit meinem code zurest folgendes Node</p>
<pre><code class="language-cpp">doctest.append_child().set_name(&quot;root&quot;);  
		xml_node root = doctest.child(&quot;root&quot;);
		root.append_child().set_name(&quot;test&quot;);
		xml_node test = Config.child(&quot;test&quot;);	
		test.append_child(pugi::node_pcdata).set_value(&quot;0&quot;);
                  test.append_child().set_name(&quot;Name&quot;);
		xml_node Name = test.child(&quot;Name&quot;);
		Name.append_child(pugi::node_pcdata).set_value(&quot;Name&quot;);
docConfig.save_file(&quot;../../test.xml&quot;,&quot;&quot;,format_no_declaration);
</code></pre>
<p>Da kommt folgedes raus:</p>
<pre><code>&lt;root&gt;
&lt;test&gt;
0
&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;/root&gt;
</code></pre>
<p>nun will ich ein weiters Node anhängen(später im code bzw. in einer anderen if schleife)</p>
<pre><code class="language-cpp">xml_node test = root.insert_child_after(pugi::node_element,root.last_child());

node erstellung wie oben
</code></pre>
<p>wird zwar das Node erstellt, aber die Datei sieht dann wie folgt aus:</p>
<pre><code>&lt;root&gt;
&lt;test&gt;

0

&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;test&gt;
0
&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;/root&gt;
</code></pre>
<p>woher kommen die Leerzeilen?<br />
wenn ich noch ein weiteres node adde wird in jedem node, pro hinzugefügtem Node, immer eine leerzeile über und unter der Zahl hizugefügt!<br />
Also steht da nachher sowas wie z.B.</p>
<pre><code>&lt;root&gt;
&lt;test&gt;

0

&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;test&gt;

0

&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;test&gt;
0
&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;/root&gt;
</code></pre>
<p>woher kommen die leerzeilen bzw. wie kann ich sie verhindern??<br />
Ich will die Nr. so in der Datei stehen haben und kein neues Element oder attribut hinzufügen.</p>
<p>gruß und danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/274348/pugixml-insert_child_after-leerzeilen-in-altem-child</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 18:11:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274348.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Sep 2010 12:21:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to PugiXML insert_child_after Leerzeilen in altem Child on Fri, 24 Sep 2010 12:21:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein problem bei insert_child_after</p>
<p>ich erstelle mit mit meinem code zurest folgendes Node</p>
<pre><code class="language-cpp">doctest.append_child().set_name(&quot;root&quot;);  
		xml_node root = doctest.child(&quot;root&quot;);
		root.append_child().set_name(&quot;test&quot;);
		xml_node test = Config.child(&quot;test&quot;);	
		test.append_child(pugi::node_pcdata).set_value(&quot;0&quot;);
                  test.append_child().set_name(&quot;Name&quot;);
		xml_node Name = test.child(&quot;Name&quot;);
		Name.append_child(pugi::node_pcdata).set_value(&quot;Name&quot;);
docConfig.save_file(&quot;../../test.xml&quot;,&quot;&quot;,format_no_declaration);
</code></pre>
<p>Da kommt folgedes raus:</p>
<pre><code>&lt;root&gt;
&lt;test&gt;
0
&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;/root&gt;
</code></pre>
<p>nun will ich ein weiters Node anhängen(später im code bzw. in einer anderen if schleife)</p>
<pre><code class="language-cpp">xml_node test = root.insert_child_after(pugi::node_element,root.last_child());

node erstellung wie oben
</code></pre>
<p>wird zwar das Node erstellt, aber die Datei sieht dann wie folgt aus:</p>
<pre><code>&lt;root&gt;
&lt;test&gt;

0

&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;test&gt;
0
&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;/root&gt;
</code></pre>
<p>woher kommen die Leerzeilen?<br />
wenn ich noch ein weiteres node adde wird in jedem node, pro hinzugefügtem Node, immer eine leerzeile über und unter der Zahl hizugefügt!<br />
Also steht da nachher sowas wie z.B.</p>
<pre><code>&lt;root&gt;
&lt;test&gt;

0

&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;test&gt;

0

&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;test&gt;
0
&lt;Name&gt;name&lt;/Name&gt;
&lt;/test&gt;
&lt;/root&gt;
</code></pre>
<p>woher kommen die leerzeilen bzw. wie kann ich sie verhindern??<br />
Ich will die Nr. so in der Datei stehen haben und kein neues Element oder attribut hinzufügen.</p>
<p>gruß und danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956870</guid><dc:creator><![CDATA[free118]]></dc:creator><pubDate>Fri, 24 Sep 2010 12:21:50 GMT</pubDate></item><item><title><![CDATA[Reply to PugiXML insert_child_after Leerzeilen in altem Child on Thu, 25 Nov 2010 14:36:51 GMT]]></title><description><![CDATA[<p>Ich hab zur Zeit das gleiche Problem.</p>
<p>Verursacht wird das durch die Formatierung bei der Ausgabe.<br />
Beim nächsten Einlesen wird aus deiner &quot;0&quot; dann ein &quot;\n0\n&quot; da die zur Formatierung eingefügten Zeilenumbrüche als Bestandteils des Textes interpretiert werden. Beim nächsten Abspeichern kommen um das &quot;\n0\n&quot; dann wieder zusätzliche Zeilenumbrüche zur Formatierung.</p>
<p>Verhindern kann man das, indem man die XML Datei unformatiert (<em>format_raw</em>) abspeichert. Vielleicht kann man wich auch ein eigenes writer interface schreiben, das die entsprechenden Zeilenumbrüche wieder entfernt.</p>
<p>Edit:<br />
Ich habe das jetzt gelöst indem ich ein zusätzliches Flag <em>format_smart_raw</em> eingeführt habe. Bei diesem Flag werden alle Knoten, die mehr als einen Unterknoten haben und wovon mindestens einer vom Typ <em>node_pcdata</em> ist als <em>format_raw</em> gespeichert.</p>
<p>Dein 1. Beispiel sieht damit so aus:</p>
<pre><code>&lt;root&gt;
&lt;test&gt;0&lt;Name&gt;name&lt;/Name&gt;&lt;/test&gt;
&lt;/root&gt;
</code></pre>
<p>und dürfte beim erneuten Einlesen (egal mit welchem Parser) keine Probleme mehr machen.<br />
Abgesehen davon wäre es bei dir vielleicht sinnvoller wenn name ein Attribut von test ist.</p>
<p>Hier das Diff:</p>
<pre><code class="language-cpp">diff org/pugixml.cpp src/pugixml.cpp
2942,2945c2942,2961
&lt; 				writer.write('&gt;', '\n');
&lt; 				
&lt; 				for (xml_node n = node.first_child(); n; n = n.next_sibling())
&lt; 					node_output(writer, n, indent, flags, depth + 1);
---
&gt;                 unsigned int smartflag = flags;
&gt; 
&gt;                 if (flags &amp; format_smart_raw)
&gt;                 {
&gt;                     for (xml_node n = node.first_child(); n; n = n.next_sibling())
&gt;                     {
&gt;                         if (n.type() == node_pcdata)
&gt;                         {
&gt;                             smartflag |= format_raw;
&gt;                             break;
&gt;                         }
&gt;                     }
&gt;                 }
&gt;                 if (smartflag &amp; format_raw)
&gt;                     writer.write('&gt;');
&gt;                 else
&gt;                     writer.write('&gt;', '\n');
&gt; 
&gt;                 for (xml_node n = node.first_child(); n; n = n.next_sibling())
&gt;                     node_output(writer, n, indent, smartflag, depth + 1);
2947c2963
&lt; 				if ((flags &amp; format_indent) != 0 &amp;&amp; (flags &amp; format_raw) == 0)
---
&gt; 				if ((flags &amp; format_indent) != 0 &amp;&amp; (smartflag &amp; format_raw) == 0)
diff org/pugixml.hpp src/pugixml.hpp
192a193,195
&gt;     // Use smart raw output mode (no indentation and no line breaks are written for nodes with more than one children and one or more pcdata nodes). This flag is off by default.
&gt;     const unsigned int format_smart_raw = 0x10;
&gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1985566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985566</guid><dc:creator><![CDATA[Gordon73]]></dc:creator><pubDate>Thu, 25 Nov 2010 14:36:51 GMT</pubDate></item></channel></rss>