0

コードはhttp://www.grinninglizard.com/tinyxml2docs/_example-3.htmlから取得されます

 static const char* xml =
        "<?xml version=\"1.0\"?>"
        "<!DOCTYPE PLAY SYSTEM \"play.dtd\">"
        "<PLAY>"
        "<TITLE>A Midsummer <b>Night's Dream</b></TITLE>"
        "</PLAY>";
XMLDocument doc;
doc.Parse(xml);
XMLElement* titleElement = doc.FirstChildElement("PLAY")->FirstChildElement("TITLE");
XMLText* textNode = titleElement->FirstChild()->ToText();
auto title = textNode->Value();

タイトルにはA Midsummer <b>Night's Dream</b>、導入説明として含まれている必要があります。しかし、コードの結果はまだA Midsummer. 誰でも私のコードの何が問題なのか、または解析を達成するための他の機能を教えてくれます。

4

2 に答える 2

1

文字列の両方の部分と、2 番目の部分が見つかった要素を取得する短いが完全なプログラムを次に示します。

#include <stdio.h>
#include <stdlib.h>

#include "../tinyxml2.h"
using namespace tinyxml2;

int main(int argc, char *argv[])
{
    static const char* xml =
        "<?xml version=\"1.0\"?>"
        "<!DOCTYPE PLAY SYSTEM \"play.dtd\">"
        "<PLAY>"
        "<TITLE>A Midsummer Night's <b>Dream</b></TITLE>"
        "</PLAY>";

    XMLDocument doc;            /* DOM tree */

    doc.Parse(xml);         /* Parse the XML */

    XMLElement* titleElement =
    doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" );

    const char* title = titleElement->GetText();    /* cheap approach */
    printf( "Name of play (part 1): %s\n", title );

    XMLNode *tp = titleElement->FirstChild();
    printf("part 1 = %s\n", tp->Value());   /* A Midsummer Night's */

    tp = tp->NextSibling();         /* point to the <b> element */
    printf("element for part 2 = %s\n", tp->Value());   /* b */
    tp = tp->FirstChild();          /* point to b's text node */
    printf("part 2 = %s\n", tp->Value());   /* Dream */
}

出力は次のとおりです。

Name of play (part 1): A Midsummer Night's 
part 1 = A Midsummer Night's 
element for part 2 = b
part 2 = Dream

以前の回答で述べたように、提供された XML では、テキストは単一の文字列として表示されません。すべてのコンポーネントを取得するには、ツリーをさらにトラバースする必要があります。

于 2016-07-18T18:46:55.397 に答える
0

Night's Dreamは要素内ではなく、内部<TITLE>にある要素内にあります。<b><TITLE>

要素のテキストに含めたい場合は<b>Night's Dream</b>、エスケープする必要があります ( http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_referencesを参照):

static const char* xml =
        "<?xml version=\"1.0\"?>"
        "<!DOCTYPE PLAY SYSTEM \"play.dtd\">"
        "<PLAY>"
        "<TITLE>A Midsummer &lt;b&gt;Night's Dream&lt;/b&gt;</TITLE>"
        "</PLAY>";
于 2015-02-18T22:40:41.087 に答える