Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QDomElement::text() - нужно подобие
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Обработка XML
Litkevich Yuriy
Есть такой XML'ьник:
<?xml version="1.0"?>
<bookindex>
    <h1>Hello
        <b>Qt</b>
        <b>XML is brain's cancer</b>
    </h1>
</bookindex>


Функция QDomElement::text() для элемента h1 вернет строку (без учета форматирования):
Hello Qt XML is brain's cancer

как можно выдернуть только: Hello т.е. без содержимого вложеных тэгов?

Вроде подходящей функции больше нет.
ViGOur
Как вариант полученный QString прочитать до первого "<" ? :)
Novak
obj.firstChild().toText() не поможет?
ViGOur
Удалил, потому как фигню сказал... :blush:
Litkevich Yuriy
пытаюсь понять что такое УЗЕЛ (NODE). Описание в стандарте расплавило мозг (из-за бесконечного цикла):
Цитата
The Node interface is the primary datatype for the entire Document Object Model. It represents a single node in the document tree.

или на русском:
Цитата
Интерфейс Node - первичный тип данных для всей Объектной Модели Документов. Он представляет единственный узел в дереве документа.


может кто-нибудь объяснить, что такое узел?

Элемент - содержит все, что находится между отрывающимся тэгом и соответствующим ему закрывающимся тэгом включая эти тэги.
Novak
Цитата(Litkevich Yuriy @ 6.9.2008, 0:16) *
может кто-нибудь объяснить, что такое узел?

По сути это единичкая структура.. Т.е. текст - это тоже узел.
Все элементы - узлы, но обратное неверно.
Потому по firstChild должен как раз вылезать текст.
Нужно различать текстовые узлы, элементы, узлы cdata
вот можно схемку посмотреть, может понятней станет...
Litkevich Yuriy
Вот пример:
<?xml version="1.0"?>
<!-- This start comment -->
<root>
<!-- This root comment -->
This is root
<tag1>
    This is tag 1
    <h1> This is header <b1>Qt1</b1> <i1>XML1 is a brain's cancer</i1></h1>
    <!-- This first comment -->
</tag1>
<tag2>
    This is tag 2
    <!-- This thecond comment -->    
    <p1>This is paragraph <b2>Qt2</b2> <i2>XML2 is a brain's cancer</i2> End of paragraph</p1>
</tag2>
</root>

Рекурсивный анализ начиная с root, т.е.
QDomDocument doc;
QDomElement root = doc.documentElement();
Вот к какому результату привел:

Type: ElementNode
Name: root
Value:
Data:
Text: This is root This is tag 1 This is header Qt1XML1 is a brain's cancer This is tag 2 This is paragraph Qt2XML2 is a brain's cancer End of paragraph
-----------------------------------------------------
Type: CommentNode
Name: #comment
Value: This root comment
Data:
Text:
-----------------------------------------------------
Type: TextNode
Name: #text
Value: This is root
Data: This is root
Text:
-----------------------------------------------------
Type: ElementNode
Name: tag1
Value:
Data:
Text: This is tag 1 This is header Qt1XML1 is a brain's cancer
-----------------------------------------------------
Type: TextNode
Name: #text
Value: This is tag 1
Data: This is tag 1
Text:
-----------------------------------------------------
Type: ElementNode
Name: h1
Value:
Data:
Text: This is header Qt1XML1 is a brain's cancer
-----------------------------------------------------
Type: TextNode
Name: #text
Value: This is header
Data: This is header
Text:
-----------------------------------------------------
Type: ElementNode
Name: b1
Value:
Data:
Text: Qt1
-----------------------------------------------------
Type: TextNode
Name: #text
Value: Qt1
Data: Qt1
Text:
-----------------------------------------------------
Type: ElementNode
Name: i1
Value:
Data:
Text: XML1 is a brain's cancer
-----------------------------------------------------
Type: TextNode
Name: #text
Value: XML1 is a brain's cancer
Data: XML1 is a brain's cancer
Text:
-----------------------------------------------------
Type: CommentNode
Name: #comment
Value: This first comment
Data:
Text:
-----------------------------------------------------
Type: ElementNode
Name: tag2
Value:
Data:
Text: This is tag 2 This is paragraph Qt2XML2 is a brain's cancer End of paragraph
-----------------------------------------------------
Type: TextNode
Name: #text
Value: This is tag 2
Data: This is tag 2
Text:
-----------------------------------------------------
Type: CommentNode
Name: #comment
Value: This thecond comment
Data:
Text:
-----------------------------------------------------
Type: ElementNode
Name: p1
Value:
Data:
Text: This is paragraph Qt2XML2 is a brain's cancer End of paragraph
-----------------------------------------------------
Type: TextNode
Name: #text
Value: This is paragraph
Data: This is paragraph
Text:
-----------------------------------------------------
Type: ElementNode
Name: b2
Value:
Data:
Text: Qt2
-----------------------------------------------------
Type: TextNode
Name: #text
Value: Qt2
Data: Qt2
Text:
-----------------------------------------------------
Type: ElementNode
Name: i2
Value:
Data:
Text: XML2 is a brain's cancer
-----------------------------------------------------
Type: TextNode
Name: #text
Value: XML2 is a brain's cancer
Data: XML2 is a brain's cancer
Text:
-----------------------------------------------------
Type: TextNode
Name: #text
Value: End of paragraph
Data: End of paragraph
Text:
-----------------------------------------------------

Novak
Так что в итоге всё понятно и проблема решена?
trdm
а фигли тут решать?
минут 10 если содержание стабильно...
Litkevich Yuriy
Цитата(Novak @ 6.9.2008, 17:01) *
Так что в итоге всё понятно и проблема решена?
Понятно, но проблема не решена, т.е. прийдется всегда проверять тип тэга и в зависимости от типа применять либо Value, либо Text
однообразия нет блин.

Цитата(trdm @ 7.9.2008, 1:15) *
а фигли тут решать?
минут 10 если содержание стабильно...
не понял
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.