<?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[TinyXml: probleme beim attribut auslesen]]></title><description><![CDATA[<p>also, ich wollte folgende testdatei auslesen:</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; ?&gt;
&lt;Datenbank &gt;
	&lt;person id=&quot;0&quot; &gt;
		&lt;name &gt;
			max
		&lt;/name&gt;
		&lt;alter &gt;
			18
		&lt;/alter&gt;
	&lt;/person&gt;
        ...
&lt;/Datenbank&gt;
</code></pre>
<p>die datei wird fehlerfrei geparst, alle subnodes werden ausgelesen, auch die werte der subnodes, aber die attribute werden nicht übernommen:</p>
<pre><code class="language-cpp">void copy(BaseNode&amp; node,const TiXmlNode* element,TagTree&amp; tree){
            switch(element-&gt;Type())
            {
                case TiXmlNode::ELEMENT:
                {
                    const TiXmlElement* elem=element-&gt;ToElement();

                    //copy attributes
                    for(const TiXmlAttribute* pos=elem-&gt;FirstAttribute();pos;pos=pos-&gt;Next()){
                        //hier geht er nie rein!
                        node.getAttributes().insert(pos-&gt;Name(),pos-&gt;Value());
                    }
                    //hier werden nun noch namen, und kinder kopiert, das funktioniert
                    //...
}
</code></pre>
<p>weis jemand,was ich falsch gemacht hab? laut doku sollte das so stimmen...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/120447/tinyxml-probleme-beim-attribut-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 08:27:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/120447.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Sep 2005 12:16:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TinyXml: probleme beim attribut auslesen on Tue, 13 Sep 2005 12:16:40 GMT]]></title><description><![CDATA[<p>also, ich wollte folgende testdatei auslesen:</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; ?&gt;
&lt;Datenbank &gt;
	&lt;person id=&quot;0&quot; &gt;
		&lt;name &gt;
			max
		&lt;/name&gt;
		&lt;alter &gt;
			18
		&lt;/alter&gt;
	&lt;/person&gt;
        ...
&lt;/Datenbank&gt;
</code></pre>
<p>die datei wird fehlerfrei geparst, alle subnodes werden ausgelesen, auch die werte der subnodes, aber die attribute werden nicht übernommen:</p>
<pre><code class="language-cpp">void copy(BaseNode&amp; node,const TiXmlNode* element,TagTree&amp; tree){
            switch(element-&gt;Type())
            {
                case TiXmlNode::ELEMENT:
                {
                    const TiXmlElement* elem=element-&gt;ToElement();

                    //copy attributes
                    for(const TiXmlAttribute* pos=elem-&gt;FirstAttribute();pos;pos=pos-&gt;Next()){
                        //hier geht er nie rein!
                        node.getAttributes().insert(pos-&gt;Name(),pos-&gt;Value());
                    }
                    //hier werden nun noch namen, und kinder kopiert, das funktioniert
                    //...
}
</code></pre>
<p>weis jemand,was ich falsch gemacht hab? laut doku sollte das so stimmen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/871031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/871031</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 13 Sep 2005 12:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to TinyXml: probleme beim attribut auslesen on Tue, 13 Sep 2005 13:19:04 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>könnte es sein, dass deine Abbruchbedingung nich korrekt ist? Müsstest du nicht zumindest eine Prüfung auf NULL durchführen?</p>
<p>Ich würde an deiner Stelle mal so etwas ausprobieren:</p>
<pre><code class="language-cpp">//copy attributes
TiXmlAttribute *pos=elem-&gt;FirstAttribute();
while (pos != 0)
{
    node.getAttributes().insert(pos-&gt;Name(),pos-&gt;Value());
    pos = pos-&gt;Next();
}
</code></pre>
<p>Es ist sowieso verwunderlich, dass das Programm nicht abbricht, denn du weist in der Schleife einem const Element einen neuen Wert zu. Das darf doch gar nicht gehen. Denn const ist ja als Schreibschutz gedacht!</p>
<p>Gruß Mea</p>
]]></description><link>https://www.c-plusplus.net/forum/post/871123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/871123</guid><dc:creator><![CDATA[Meaculpa]]></dc:creator><pubDate>Tue, 13 Sep 2005 13:19:04 GMT</pubDate></item><item><title><![CDATA[Reply to TinyXml: probleme beim attribut auslesen on Tue, 13 Sep 2005 14:48:24 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">const TiXmlElement*
</code></pre>
<p>das ist ein Zeiger auf const objekt, selbst ist es veränderbar!</p>
<p>einen const zeiger definiert man so</p>
<pre><code class="language-cpp">TiXmlElement* const
</code></pre>
<blockquote>
<p>könnte es sein, dass deine Abbruchbedingung nich korrekt ist? Müsstest du nicht zumindest eine Prüfung auf NULL durchführen?</p>
</blockquote>
<p>ich prüfe auf NULL. schau dir die mittlere bedingung an:</p>
<pre><code class="language-cpp">for(...;pos;...){}
</code></pre>
<p>ist dasselbe wie</p>
<pre><code class="language-cpp">for(...;pos!=NULL;...){}
</code></pre>
<p>Syntaktisch ist das korrekt(der compielr stimmt mir zu). semantisch scheint da etwas nicht in ordnung zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/871237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/871237</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 13 Sep 2005 14:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to TinyXml: probleme beim attribut auslesen on Tue, 13 Sep 2005 14:57:40 GMT]]></title><description><![CDATA[<p>Funktioniert das Auslesen oder das Einfügen nicht? Gibt getAttributes() eventuell eine Kopie zurück?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/871247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/871247</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 13 Sep 2005 14:57:40 GMT</pubDate></item><item><title><![CDATA[Reply to TinyXml: probleme beim attribut auslesen on Tue, 13 Sep 2005 15:11:13 GMT]]></title><description><![CDATA[<p>er kommt nichtmal rein. er betritt nie das innere der schleife.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/871266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/871266</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 13 Sep 2005 15:11:13 GMT</pubDate></item><item><title><![CDATA[Reply to TinyXml: probleme beim attribut auslesen on Tue, 13 Sep 2005 17:08:36 GMT]]></title><description><![CDATA[<p>habs grad nochmal überprüft, und elem-&gt;FirstAttribute() gibt immer 0 zurück <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/871353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/871353</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 13 Sep 2005 17:08:36 GMT</pubDate></item><item><title><![CDATA[Reply to TinyXml: probleme beim attribut auslesen on Tue, 13 Sep 2005 20:25:09 GMT]]></title><description><![CDATA[<p>so, ich bin jetzt ein stück weiter:</p>
<p>enum-&gt;Attribute(&quot;id&quot;); findet ein Attribut.<br />
enum-&gt;FirstAttribute(); findet keins.</p>
<p>ich hab nun sehr lange gerätselt und hab mich nun bis in den code von TinyXML vorgekämpft.</p>
<p>beim aufruf von Attribute(&quot;id&quot;) werden folgende funktionen aufgerufen:</p>
<pre><code class="language-cpp">const char * TiXmlElement::Attribute( const char * name ) const
{
	const TiXmlAttribute* node = attributeSet.Find( name );

	if ( node )
		return node-&gt;Value();

	return 0;
}

//die von attribute aufgerufene find funktion
TiXmlAttribute*	TiXmlAttributeSet::Find( const char * name )
{
	TiXmlAttribute* node;

	for( node = sentinel.next; node != &amp;sentinel; node = node-&gt;next )
	{
		if ( node-&gt;name == name )
			return node;
	}
	return 0;
}
</code></pre>
<p>FirstAttribute() benutzt folgenden code</p>
<pre><code class="language-cpp">const TiXmlAttribute* FirstAttribute() const	
{ 
    return attributeSet.First(); 
}

const TiXmlAttribute* First()	const	
{ 
    return ( sentinel.next != &amp;sentinel ) ? sentinel.next : 0; 
}
</code></pre>
<p>was ich mich jetzt frage ist, wieso der vergleich einmal false und einmal true ergibt. Zwischen den aufrufen passiert nichts, aber im einen fall läuft die schleife durch, im andren ergibt der Vergleich false.</p>
<p>vielleicht siehts ja spontan jemand, aber ich komm einfach nicht drauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/871487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/871487</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 13 Sep 2005 20:25:09 GMT</pubDate></item></channel></rss>