В TinyXML2, как использовать XMLText для получения всего текста со встроенным маркером

Код получен из 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, Кто-нибудь может сказать мне, что не так с моим кодом или какой-то другой функцией для анализа.

0

Решение

Вот короткая, но полная программа, которая получает обе части строки и элемент, в котором находится вторая часть:

#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 текст не представлен в виде одной строки. Чтобы получить все компоненты, требуется пройти еще по дереву.

1

Другие решения

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>";
0

По вопросам рекламы [email protected]