<?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[Logikproblem Tinyxml]]></title><description><![CDATA[<p>Hey, und zwar möchte ich via Tinyxml ein ganz bestimmtes Element auslesen aus einem XML String.</p>
<p>Aufbau des Strings wäre Beispielsweise:</p>
<pre><code class="language-html">&lt;root&gt;
   &lt;child&gt;
      &lt;subchild&gt;
         &lt;first&gt;Inhalt&lt;/first&gt;   // Bis hierhin komm ich über eine Schleife
         &lt;second&gt;Inhalt&lt;/second&gt;
         &lt;third&gt;Inhalt&lt;/third&gt;   // Dieses Element will ich auslesen
         &lt;fourth&gt;Inhalt&lt;/fourth&gt;
         &lt;fifth&gt;Inhalt&lt;/fifth&gt;
      &lt;/subchild&gt;
   &lt;child&gt;
&lt;root&gt;
</code></pre>
<p>Mein Code sieht momentan so aus:</p>
<pre><code class="language-cpp">CString servicezugriff::getresult(CString xmlstring, CString searchnode)
{
	TiXmlDocument xmldoc;
	xmldoc.Parse(xmlstring);
	TiXmlNode *xmlnode = xmldoc.RootElement();
	CString Values;
	while(xmlnode != 0)
	{
		Values = Values +&quot;\t&quot;+xmlnode-&gt;Value(); // Um zu prüfen bis wohin die Schleife läuft
		xmlnode = xmlnode-&gt;FirstChildElement();
	}

	return Values; // Hier soll am Ende das gesuchte Element zurück gegeben werden
}
</code></pre>
<p>Bitte nicht von CString ablenken lassen, ich ist zwar MFC aber der Rest nicht.</p>
<p>Aus der Dokumentation zu Tinyxml werde ich in der Richtung nicht schlau. Ich hoffe, ihr könnt mir einen Denkanstoß geben wie ich an das gesuchte Element komme.</p>
<p>// Lach ich bring mich hier selbst durcheinander mit den Codeformatierungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243038/logikproblem-tinyxml</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 15:10:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243038.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Jun 2009 13:45:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Logikproblem Tinyxml on Thu, 11 Jun 2009 13:47:50 GMT]]></title><description><![CDATA[<p>Hey, und zwar möchte ich via Tinyxml ein ganz bestimmtes Element auslesen aus einem XML String.</p>
<p>Aufbau des Strings wäre Beispielsweise:</p>
<pre><code class="language-html">&lt;root&gt;
   &lt;child&gt;
      &lt;subchild&gt;
         &lt;first&gt;Inhalt&lt;/first&gt;   // Bis hierhin komm ich über eine Schleife
         &lt;second&gt;Inhalt&lt;/second&gt;
         &lt;third&gt;Inhalt&lt;/third&gt;   // Dieses Element will ich auslesen
         &lt;fourth&gt;Inhalt&lt;/fourth&gt;
         &lt;fifth&gt;Inhalt&lt;/fifth&gt;
      &lt;/subchild&gt;
   &lt;child&gt;
&lt;root&gt;
</code></pre>
<p>Mein Code sieht momentan so aus:</p>
<pre><code class="language-cpp">CString servicezugriff::getresult(CString xmlstring, CString searchnode)
{
	TiXmlDocument xmldoc;
	xmldoc.Parse(xmlstring);
	TiXmlNode *xmlnode = xmldoc.RootElement();
	CString Values;
	while(xmlnode != 0)
	{
		Values = Values +&quot;\t&quot;+xmlnode-&gt;Value(); // Um zu prüfen bis wohin die Schleife läuft
		xmlnode = xmlnode-&gt;FirstChildElement();
	}

	return Values; // Hier soll am Ende das gesuchte Element zurück gegeben werden
}
</code></pre>
<p>Bitte nicht von CString ablenken lassen, ich ist zwar MFC aber der Rest nicht.</p>
<p>Aus der Dokumentation zu Tinyxml werde ich in der Richtung nicht schlau. Ich hoffe, ihr könnt mir einen Denkanstoß geben wie ich an das gesuchte Element komme.</p>
<p>// Lach ich bring mich hier selbst durcheinander mit den Codeformatierungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725049</guid><dc:creator><![CDATA[inflames2k]]></dc:creator><pubDate>Thu, 11 Jun 2009 13:47:50 GMT</pubDate></item><item><title><![CDATA[Reply to Logikproblem Tinyxml on Thu, 11 Jun 2009 14:34:25 GMT]]></title><description><![CDATA[<p>TinyXML ist kacke und hat Bugs.<br />
Schreib dir selbst nen Parser, das kann jeder besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725069</guid><dc:creator><![CDATA[Flamer]]></dc:creator><pubDate>Thu, 11 Jun 2009 14:34:25 GMT</pubDate></item><item><title><![CDATA[Reply to Logikproblem Tinyxml on Thu, 11 Jun 2009 14:46:53 GMT]]></title><description><![CDATA[<p>Ich möcht hier nun nicht über Vor und Nachteile von Tinyxml duskutieren.</p>
<p>Einen eigenen Parser zu schreiben würde das Problem zwar sicherlich beheben, aber in einem Zeitaufwand der ziemlich hoch wäre und das Rad muss nicht unbedingt neu erfunden werden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Aus der Dokumentation von Tinyxml geht für mich hervor, dass mit der Methode NextSiblingElement() auf die Geschwisterelemente zugegriffen werden kann, also in diesem Fall second, third und so weiter.</p>
<p>Aber wie prüfe ich ob das momentane Element das gesuchte ist?</p>
<p>Probiert habe ich es über:</p>
<pre><code class="language-cpp">if(xmlnode-&gt;Value()==xmlnode)
</code></pre>
<p>Da erhalte ich aber eine Zugriffsverletzung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725079</guid><dc:creator><![CDATA[inflames2k]]></dc:creator><pubDate>Thu, 11 Jun 2009 14:46:53 GMT</pubDate></item><item><title><![CDATA[Reply to Logikproblem Tinyxml on Thu, 11 Jun 2009 14:55:24 GMT]]></title><description><![CDATA[<p>Vll hilft dir das hier:</p>
<pre><code class="language-cpp">const TiXmlElement* GetAttribute(const std::string &amp;propertyName, const TiXmlElement* begin)
{
	for(; begin; begin = begin-&gt;NextSiblingElement())
	{
		const char *val = begin-&gt;Attribute(&quot;Name&quot;);
		if(!strcmp(propertyName.c_str(), val))
			return begin;
	}

	return nullptr;
}
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725084</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 11 Jun 2009 14:55:24 GMT</pubDate></item><item><title><![CDATA[Reply to Logikproblem Tinyxml on Thu, 11 Jun 2009 15:00:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">TiXmlDocument xmldoc;
xmldoc.Parse(xmlstring);

TiXmlHandle handle(&amp;xmldoc);

handle.FirstChild(&quot;root&quot;);
handle.FirstChild(&quot;child&quot;);
handle.FirstChild(&quot;subchild&quot;);
handle.FirstChild(&quot;thrid&quot;);

TiXmlElement* elem = handle.ToElement();

if(elem)
{
  // vorhanden ...
}
</code></pre>
<p>Einfach so aus dem Kopf heraus. Keine Garantie auf Korrektheit. Aber ist ja wirklich nicht so schwer. Lies doch einfach mal die Dokumentation.</p>
<p>Hier hast du fast ein 1:1 Beispiel von deinem Fall:<br />
<a href="http://www.grinninglizard.com/tinyxmldocs/classTiXmlHandle.html" rel="nofollow">http://www.grinninglizard.com/tinyxmldocs/classTiXmlHandle.html</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725086</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 11 Jun 2009 15:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to Logikproblem Tinyxml on Thu, 11 Jun 2009 15:11:59 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<pre><code class="language-cpp">TiXmlDocument xmldoc;
xmldoc.Parse(xmlstring);

TiXmlHandle handle(&amp;xmldoc);

handle.FirstChild(&quot;root&quot;);
handle.FirstChild(&quot;child&quot;);
handle.FirstChild(&quot;subchild&quot;);
handle.FirstChild(&quot;thrid&quot;);

TiXmlElement* elem = handle.ToElement();

if(elem)
{
  // vorhanden ...
}
</code></pre>
<p>Einfach so aus dem Kopf heraus. Keine Garantie auf Korrektheit. Aber ist ja wirklich nicht so schwer. Lies doch einfach mal die Dokumentation.</p>
<p>Hier hast du fast ein 1:1 Beispiel von deinem Fall:<br />
<a href="http://www.grinninglizard.com/tinyxmldocs/classTiXmlHandle.html" rel="nofollow">http://www.grinninglizard.com/tinyxmldocs/classTiXmlHandle.html</a></p>
<p>Grüssli</p>
</blockquote>
<p>Naja soweit ok, da weis ich dass das Element existiert aber das wusst ich vorher schon. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Es ist so, dass ich eine Antwort eines Webservice erhalte und mit Tinyxml eben die wichtigen Knoten abfragen will über die von mir geschriebene Funktion.<br />
So, da die Funktion allgemeingültig sein soll funktioniert es so nicht.</p>
<p>Auf deine Weise kann ich nur auf das eine Element zugreifen. Rufe ich die Funktion nocheinmal auf, kommt das selbe Resultat.</p>
<p>Wäre aber unvorteilhaft bei verschiedenen XML Dateien, die ich mit der Funktion dann auswerten möchte.</p>
<p>// unskilled deins sieht aus, als könnte es funktionieren. Werd ich direkt mal testen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725092</guid><dc:creator><![CDATA[inflames2k]]></dc:creator><pubDate>Thu, 11 Jun 2009 15:11:59 GMT</pubDate></item><item><title><![CDATA[Reply to Logikproblem Tinyxml on Thu, 11 Jun 2009 15:29:45 GMT]]></title><description><![CDATA[<p>inflames2k schrieb:</p>
<blockquote>
<p>Es ist so, dass ich eine Antwort eines Webservice erhalte und mit Tinyxml eben die wichtigen Knoten abfragen will über die von mir geschriebene Funktion.<br />
So, da die Funktion allgemeingültig sein soll funktioniert es so nicht.</p>
<p>Auf deine Weise kann ich nur auf das eine Element zugreifen. Rufe ich die Funktion nocheinmal auf, kommt das selbe Resultat.</p>
</blockquote>
<p>Häää?<br />
Denk doch bitte mal ein bisschen mit! Du kannst die festen Stringliterale auch durch variablen ersetzen! Statt <code>&quot;third&quot;</code> kannst du dort auch dein <code>CString</code> Objekt übergeben, du musst es nur in einen <code>std::string</code> oder <code>char const*</code> konvertieren.</p>
<p>Die Prüfung ob es vorhanden ist, ist einfach zur Sicherheit dort. Du hast aber dann ein <code>TiXmlElement</code> Objekt, welches dir auch entsprechenden Zugriff auf den Knoten gibt.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725101</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 11 Jun 2009 15:29:45 GMT</pubDate></item><item><title><![CDATA[Reply to Logikproblem Tinyxml on Fri, 12 Jun 2009 07:58:14 GMT]]></title><description><![CDATA[<p>Hab noch eine Frage, für mich zum Verständniss.<br />
Und zwar FirstChildElement(wert), ich habe es so verstanden, dass er hier das erste Element welches den Tagnamen wert hat nimmt. Versteh ich das Falsch?<br />
Wenn ja, kann mir einer kurz erklären, was er da auswählt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725410</guid><dc:creator><![CDATA[inflames2k]]></dc:creator><pubDate>Fri, 12 Jun 2009 07:58:14 GMT</pubDate></item><item><title><![CDATA[Reply to Logikproblem Tinyxml on Fri, 12 Jun 2009 08:06:19 GMT]]></title><description><![CDATA[<p>inflames2k schrieb:</p>
<blockquote>
<p>Hab noch eine Frage, für mich zum Verständniss.<br />
Und zwar FirstChildElement(wert), ich habe es so verstanden, dass er hier das erste Element welches den Tagnamen wert hat nimmt. Versteh ich das Falsch?<br />
Wenn ja, kann mir einer kurz erklären, was er da auswählt?</p>
</blockquote>
<p>ein element ist zu mindest in der Qt4-Implementierung so was</p>
<pre><code>&lt;element /&gt;
</code></pre>
<p>Da die sich an den DOM-Standard halten wird das auch bei TinyXml zutreffen.<br />
Und ein firstChildElement(&quot;test&quot;) gibt das erste Element &lt;test /&gt; zurück.<br />
Diese DomNode hat dann einen nodeName() == &quot;test&quot;.<br />
Wenn du aber nicht nur das erste ChildElement mit dem nodeName haben willst, musst du von dem ersten Fund mit nextSiblingElement() weiter machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725415</guid><dc:creator><![CDATA[tandem]]></dc:creator><pubDate>Fri, 12 Jun 2009 08:06:19 GMT</pubDate></item><item><title><![CDATA[Reply to Logikproblem Tinyxml on Fri, 12 Jun 2009 08:35:42 GMT]]></title><description><![CDATA[<p>Ok, also hab ich das doch richtig verstanden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Danke.</p>
<p>// Achja bevor ichs vergesse, ich hab nun erreicht was ich wollte.</p>
<p>Falls jemand mal eine ähnliche Funktion braucht hier der Quelltest:</p>
<pre><code class="language-cpp">CString getresult(CString xmlstring, CString searchnode)
{
	TiXmlDocument xmldoc;
	xmldoc.Parse(xmlstring);

	TiXmlNode *xmlnode = xmldoc.RootElement();
	CString Value;

	// Den XML-String durchgehen, bis ein Element kommt ohne Child
	int i=0;
	do
	{		
		xmlnode = xmlnode-&gt;FirstChildElement();	
		i++;	
	}while(xmlnode != 0);

	TiXmlNode *xmlnode2 = xmldoc.RootElement();

         // Bis zum letzten Element mit Childs durchgehen
	for(int j=0; j&lt;i-1; j++)
	{		
		xmlnode2 = xmlnode2-&gt;FirstChildElement();
	}

	TiXmlElement *elem = xmlnode2-&gt;ToElement();

         // Das Childelement mit dem gesuchten Namen aufrufen
	elem = elem-&gt;NextSiblingElement((LPCTSTR)searchnode);

         if(elem)
		Value = elem-&gt;GetText();
         // Else Teil hier nur für meine bedürfnisse, da ich den 1. Child brauche
	else
	{
		xmlnode2 = xmlnode2-&gt;IterateChildren(xmlnode);
		Value = Value+xmlnode2-&gt;Value();
	}
	return Value;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1725433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725433</guid><dc:creator><![CDATA[inflames2k]]></dc:creator><pubDate>Fri, 12 Jun 2009 08:35:42 GMT</pubDate></item></channel></rss>