powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / tinyxml и форматированный текст
3 сообщений из 3, страница 1 из 1
tinyxml и форматированный текст
    #34051625
Alexander Xok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди кто работал с tinyxml подскажите пожалуйста как в цикли обойти xml описывающий форматированный текст, вытащить атрибуты для дальнейшего отображения текста на экране?
Формат текста примерно следующий:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>  <textformat>
    <ctext bcolor="00ff00">
      <text>Hello</text>
      <space/>
      <text color="ff0000">world</text>
      <newline/>
    </ctext>
    <ltext>
      <space count="3"/>
      <text color="0000ff">I’m very</text>
      <space/>
      <text color="ff0000">happy!</text>
      <newline/>
    </ltext>
  </text_format>
где text_format - это главный контейнер в котором содержится весь документ ctext и ltext текстовые контейнеры в которых может содержатся текст, новые строки и специальный тег пробела. ctext и ltext описываю общий стиль текста. text - тег находящийся или в ctext или ltext контейнере и описывающий стиль строки. space - начальные и конечные пробелы. newline - новая строка (CRLF).
Как показано в примере возможна ситуация при которой какой-либо атрибут отсутствует. В этом случае при отображении текста нужно будет подставить значение по-умолчанию
...
Рейтинг: 0 / 0
tinyxml и форматированный текст
    #34051971
Alexander Xok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упрощу вопрос.
Этот же XML только нужны вывести все в столбик. Названия тега, его атрибуты и значение если есть.
...
Рейтинг: 0 / 0
tinyxml и форматированный текст
    #34052274
Alexander Xok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот что я придумал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  TiXmlDocument *xml = new TiXmlDocument();
  xml->Parse(str_xml);
  if (xml->Error()) {
    printf("Error!");
    return;
  }
  for (TiXmlElement *pitem = xml->FirstChildElement(); 
       pitem; 
       pitem = pitem->NextSiblingElement() ? pitem->NextSiblingElement() : pitem->FirstChildElement()) {
      printf("%s = [", pitem->Value());
      if ( 0  == strcmp(pitem->Value(), "ctext")) {
        printf("bcolor = %s", pitem->Attribute("bcolor") ? pitem->Attribute("bcolor") : "ffffff");
      }
      if ( 0  == strcmp(pitem->Value(), "text")) {
        printf("color = %s ", pitem->Attribute("color") ? pitem->Attribute("color") : "000000");
        if (pitem->FirstChild()->Value()) {
          printf("text = %s", pitem->FirstChild()->Value());
        }
      }
      printf("]\n");
    }
Но код получился не очень хороший. Не хотелось бы сравнивать всё через strcmp. Лучше всего было бы привести строки к перечислимому типу и уже через switch разбирать выражение. Но это не самое важное. Вопрос в том как узнать, что контейнер закрылся?
Я думаю мой метод прохода XML не есть стандартным в таком случае. Посоветуйте как лучше в данной ситуации поступить.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / tinyxml и форматированный текст
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]