<?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[XML Datei Parsen mit Xerces. getNodeValue Fehler.]]></title><description><![CDATA[<p>Hallo Leute,<br />
dies ist mein erster Post hier in dem Forum und ich hoffe, dass ihr mir helfen könnt <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 />
Sitze nun seit einiger Zeit hier auf der Arbeit an einer Art Bankautomaten und bin grade dabei, die Kundendaten aus einer XML Datei auszulesen.<br />
Meine XML Datei sieht wie folgt aus:</p>
<pre><code class="language-cpp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot; standalone=&quot;no&quot; ?&gt;
&lt;bankomat&gt;
  &lt;kunde&gt;
    &lt;vorname&gt;test1&lt;/vorname&gt;
    &lt;nachname&gt;test2&lt;/nachname&gt;
    &lt;pin&gt;123&lt;/pin&gt;
    &lt;kontostand&gt;5000&lt;/kontostand&gt;
  &lt;/kunde&gt;
  &lt;kunde&gt;
    &lt;vorname&gt;test3&lt;/vorname&gt;
    &lt;nachname&gt;test4&lt;/nachname&gt;
    &lt;pin&gt;456&lt;/pin&gt;
    &lt;kontostand&gt;6000&lt;/kontostand&gt;
  &lt;/kunde&gt;
&lt;/bankomat&gt;
</code></pre>
<p>Nun will ich die Value rausfiltern (Elemente sind kein Problem)<br />
Also sprich test1, test2 ....<br />
Dies probiere ich mit getNodeValue wie folgt:</p>
<pre><code class="language-cpp">const XMLCh* value = currentNode-&gt;getNodeValue();
			std::string	currentValue;
			if (value)
			{
				currentValue = xercesc::XMLString::transcode(value);
				std::cout &lt;&lt; value &lt;&lt; std::endl;
				std::cout &lt;&lt; currentValue &lt;&lt; std::endl;
			}
			else
			{
				currentValue = &quot;No Value&quot;;
				std::cout &lt;&lt; currentValue;
			}
</code></pre>
<p>Hier der gesamte Code:</p>
<pre><code class="language-cpp">class XStr
{
public :
    // -----------------------------------------------------------------------
    //  Constructors and Destructor
    // -----------------------------------------------------------------------
    XStr(const char* const toTranscode)
    {
        // Call the private transcoding method
        fUnicodeForm = XMLString::transcode(toTranscode);
    }

    ~XStr()
    {
        XMLString::release(&amp;fUnicodeForm);
    }

    // -----------------------------------------------------------------------
    //  Getter methods
    // -----------------------------------------------------------------------
    const XMLCh* unicodeForm() const
    {
        return fUnicodeForm;
    }

private :
    // -----------------------------------------------------------------------
    //  Private data members
    //
    //  fUnicodeForm
    //      This is the Unicode XMLCh format of the string.
    // -----------------------------------------------------------------------
    XMLCh*   fUnicodeForm;
};
char* xmlFile;
#define X(str) XStr(str).unicodeForm()

void traverseXml(xercesc::DOMElement *element)
{   

    xercesc::DOMNodeList *children = element-&gt;getChildNodes();
    const  XMLSize_t nodeCount = children-&gt;getLength();    

    for( XMLSize_t n = 0; n &lt; nodeCount; ++n )
    {        
        xercesc::DOMNode *currentNode = children-&gt;item(n);

        if( currentNode-&gt;getNodeType() &amp;&amp;
                ( currentNode-&gt;getNodeType() == xercesc::DOMNode::ELEMENT_NODE )) // is element
        {
        // Found node which is an Element. Re-cast node as element
            xercesc::DOMElement* currentElement = dynamic_cast&lt; xercesc::DOMElement* &gt; ( currentNode );

            std::string currentName(xercesc::XMLString::transcode(currentElement-&gt;getTagName()));
            std::string elementName(xercesc::XMLString::transcode(element-&gt;getTagName()));

			const XMLCh* value = currentNode-&gt;getNodeValue();
			std::string	currentValue;
			if (value)
			{
				currentValue = xercesc::XMLString::transcode(value);
				std::cout &lt;&lt; value &lt;&lt; std::endl;
				std::cout &lt;&lt; currentValue &lt;&lt; std::endl;
			}
			else
			{
				currentValue = &quot;No Value&quot;;
				std::cout &lt;&lt; currentValue;
			}

            //xercesc::DOMElement* tempElement = dynamic_cast&lt; xercesc::DOMElement* &gt; ( currentNode );

            //std::cout &lt;&lt; &quot; - &quot; &lt;&lt; xercesc::XMLString::transcode(tempElement-&gt;getTagName()) &lt;&lt; std::endl ;
			//std::cout &lt;&lt; &quot;Element: &quot; &lt;&lt; elementName &lt;&lt; std::endl;  
			//std::cout &lt;&lt; &quot;Current: &quot; &lt;&lt; currentName &lt;&lt; std::endl;
			//std::cout &lt;&lt; &quot;Value: &quot; &lt;&lt; currentValue &lt;&lt; std::endl;

            traverseXml(currentElement);
        }
    }
}

bool parseXML()
{
    try
    {
        XMLPlatformUtils::Initialize();
    }

    catch(const XMLException&amp; toCatch)
    {
        char *pMsg = XMLString::transcode(toCatch.getMessage());
        XERCES_STD_QUALIFIER cerr &lt;&lt; &quot;Error during Xerces-c Initialization.\n&quot;
             &lt;&lt; &quot;  Exception message:&quot;
             &lt;&lt; pMsg;
        XMLString::release(&amp;pMsg);
        return 1;
    }

  XercesDOMParser* parser = new XercesDOMParser();

    xercesc::XMLPlatformUtils::Initialize();

    XercesDOMParser* m_configFileParser = new xercesc::XercesDOMParser;

    m_configFileParser-&gt;setValidationScheme( xercesc::XercesDOMParser::Val_Never );
    m_configFileParser-&gt;setDoNamespaces( false );
    m_configFileParser-&gt;setDoSchema( false );
    m_configFileParser-&gt;setLoadExternalDTD( false );
    m_configFileParser-&gt;parse(&quot;Kunden.xml&quot;);
    parser-&gt;getDocument();
    xercesc::DOMDocument *xmlDoc = m_configFileParser-&gt;getDocument();
    xercesc::DOMElement *elementRoot = xmlDoc-&gt;getDocumentElement();

    if( !elementRoot )
    {
        std::cout &lt;&lt; &quot;empty XML document&quot; &lt;&lt; std::endl;
        return false;
    }
    else
    {
        traverseXml(elementRoot);
    }

    return true;

}

int main()
{
 parseXML();
}
</code></pre>
<p>Hoffe auf Hilfe :-))</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282161/xml-datei-parsen-mit-xerces-getnodevalue-fehler</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 09:37:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282161.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Feb 2011 07:12:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to XML Datei Parsen mit Xerces. getNodeValue Fehler. on Tue, 15 Feb 2011 07:41:31 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
dies ist mein erster Post hier in dem Forum und ich hoffe, dass ihr mir helfen könnt <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 />
Sitze nun seit einiger Zeit hier auf der Arbeit an einer Art Bankautomaten und bin grade dabei, die Kundendaten aus einer XML Datei auszulesen.<br />
Meine XML Datei sieht wie folgt aus:</p>
<pre><code class="language-cpp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot; standalone=&quot;no&quot; ?&gt;
&lt;bankomat&gt;
  &lt;kunde&gt;
    &lt;vorname&gt;test1&lt;/vorname&gt;
    &lt;nachname&gt;test2&lt;/nachname&gt;
    &lt;pin&gt;123&lt;/pin&gt;
    &lt;kontostand&gt;5000&lt;/kontostand&gt;
  &lt;/kunde&gt;
  &lt;kunde&gt;
    &lt;vorname&gt;test3&lt;/vorname&gt;
    &lt;nachname&gt;test4&lt;/nachname&gt;
    &lt;pin&gt;456&lt;/pin&gt;
    &lt;kontostand&gt;6000&lt;/kontostand&gt;
  &lt;/kunde&gt;
&lt;/bankomat&gt;
</code></pre>
<p>Nun will ich die Value rausfiltern (Elemente sind kein Problem)<br />
Also sprich test1, test2 ....<br />
Dies probiere ich mit getNodeValue wie folgt:</p>
<pre><code class="language-cpp">const XMLCh* value = currentNode-&gt;getNodeValue();
			std::string	currentValue;
			if (value)
			{
				currentValue = xercesc::XMLString::transcode(value);
				std::cout &lt;&lt; value &lt;&lt; std::endl;
				std::cout &lt;&lt; currentValue &lt;&lt; std::endl;
			}
			else
			{
				currentValue = &quot;No Value&quot;;
				std::cout &lt;&lt; currentValue;
			}
</code></pre>
<p>Hier der gesamte Code:</p>
<pre><code class="language-cpp">class XStr
{
public :
    // -----------------------------------------------------------------------
    //  Constructors and Destructor
    // -----------------------------------------------------------------------
    XStr(const char* const toTranscode)
    {
        // Call the private transcoding method
        fUnicodeForm = XMLString::transcode(toTranscode);
    }

    ~XStr()
    {
        XMLString::release(&amp;fUnicodeForm);
    }

    // -----------------------------------------------------------------------
    //  Getter methods
    // -----------------------------------------------------------------------
    const XMLCh* unicodeForm() const
    {
        return fUnicodeForm;
    }

private :
    // -----------------------------------------------------------------------
    //  Private data members
    //
    //  fUnicodeForm
    //      This is the Unicode XMLCh format of the string.
    // -----------------------------------------------------------------------
    XMLCh*   fUnicodeForm;
};
char* xmlFile;
#define X(str) XStr(str).unicodeForm()

void traverseXml(xercesc::DOMElement *element)
{   

    xercesc::DOMNodeList *children = element-&gt;getChildNodes();
    const  XMLSize_t nodeCount = children-&gt;getLength();    

    for( XMLSize_t n = 0; n &lt; nodeCount; ++n )
    {        
        xercesc::DOMNode *currentNode = children-&gt;item(n);

        if( currentNode-&gt;getNodeType() &amp;&amp;
                ( currentNode-&gt;getNodeType() == xercesc::DOMNode::ELEMENT_NODE )) // is element
        {
        // Found node which is an Element. Re-cast node as element
            xercesc::DOMElement* currentElement = dynamic_cast&lt; xercesc::DOMElement* &gt; ( currentNode );

            std::string currentName(xercesc::XMLString::transcode(currentElement-&gt;getTagName()));
            std::string elementName(xercesc::XMLString::transcode(element-&gt;getTagName()));

			const XMLCh* value = currentNode-&gt;getNodeValue();
			std::string	currentValue;
			if (value)
			{
				currentValue = xercesc::XMLString::transcode(value);
				std::cout &lt;&lt; value &lt;&lt; std::endl;
				std::cout &lt;&lt; currentValue &lt;&lt; std::endl;
			}
			else
			{
				currentValue = &quot;No Value&quot;;
				std::cout &lt;&lt; currentValue;
			}

            //xercesc::DOMElement* tempElement = dynamic_cast&lt; xercesc::DOMElement* &gt; ( currentNode );

            //std::cout &lt;&lt; &quot; - &quot; &lt;&lt; xercesc::XMLString::transcode(tempElement-&gt;getTagName()) &lt;&lt; std::endl ;
			//std::cout &lt;&lt; &quot;Element: &quot; &lt;&lt; elementName &lt;&lt; std::endl;  
			//std::cout &lt;&lt; &quot;Current: &quot; &lt;&lt; currentName &lt;&lt; std::endl;
			//std::cout &lt;&lt; &quot;Value: &quot; &lt;&lt; currentValue &lt;&lt; std::endl;

            traverseXml(currentElement);
        }
    }
}

bool parseXML()
{
    try
    {
        XMLPlatformUtils::Initialize();
    }

    catch(const XMLException&amp; toCatch)
    {
        char *pMsg = XMLString::transcode(toCatch.getMessage());
        XERCES_STD_QUALIFIER cerr &lt;&lt; &quot;Error during Xerces-c Initialization.\n&quot;
             &lt;&lt; &quot;  Exception message:&quot;
             &lt;&lt; pMsg;
        XMLString::release(&amp;pMsg);
        return 1;
    }

  XercesDOMParser* parser = new XercesDOMParser();

    xercesc::XMLPlatformUtils::Initialize();

    XercesDOMParser* m_configFileParser = new xercesc::XercesDOMParser;

    m_configFileParser-&gt;setValidationScheme( xercesc::XercesDOMParser::Val_Never );
    m_configFileParser-&gt;setDoNamespaces( false );
    m_configFileParser-&gt;setDoSchema( false );
    m_configFileParser-&gt;setLoadExternalDTD( false );
    m_configFileParser-&gt;parse(&quot;Kunden.xml&quot;);
    parser-&gt;getDocument();
    xercesc::DOMDocument *xmlDoc = m_configFileParser-&gt;getDocument();
    xercesc::DOMElement *elementRoot = xmlDoc-&gt;getDocumentElement();

    if( !elementRoot )
    {
        std::cout &lt;&lt; &quot;empty XML document&quot; &lt;&lt; std::endl;
        return false;
    }
    else
    {
        traverseXml(elementRoot);
    }

    return true;

}

int main()
{
 parseXML();
}
</code></pre>
<p>Hoffe auf Hilfe :-))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2021144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2021144</guid><dc:creator><![CDATA[Joscha__]]></dc:creator><pubDate>Tue, 15 Feb 2011 07:41:31 GMT</pubDate></item><item><title><![CDATA[Reply to XML Datei Parsen mit Xerces. getNodeValue Fehler. on Tue, 15 Feb 2011 12:33:49 GMT]]></title><description><![CDATA[<p>Ein kurzer Blick auf die APi läßt vermuten, dass<br />
getTextContent() von DOMNode das ist, was du haben möchtest:</p>
<p><a href="http://xerces.apache.org/xerces-c/apiDocs-3/classDOMNode.html#676aacf9c5bcc6335be34bd952b10d44" rel="nofollow">http://xerces.apache.org/xerces-c/apiDocs-3/classDOMNode.html#676aacf9c5bcc6335be34bd952b10d44</a></p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2021236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2021236</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 15 Feb 2011 12:33:49 GMT</pubDate></item></channel></rss>