Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.30;
Скачать: CL | DM;

Вниз

Вопрос по парсингу xml-файлов   Найти похожие ветки 

 
Delp   (2010-04-01 11:46) [0]

Подскажите пожалуйста как получить содержимое тега следующего вида:

<text>Какой-то там <content>большой</content> текст.</text>

Использую стандартные xmlintf и xmldoc.
При обычном получении, типа:
str:= vartostr(node.childdocument.nodes["text"].NodeValue) вылетает ошибка "Element "text" does not contain a single text node".
Как правильно отпарсить такого вида тэг?


 
Медвежонок Пятачок ©   (2010-04-01 11:51) [1]

на какой узел указывает node?
зачем здесь чайлддокумент?


 
Delp   (2010-04-01 12:06) [2]

Вообще, суть не в этом. Для правильности пусть будет так:

<section>
<text>Какой-то там <content>большой</content> текст.</text>
<section>

А в делфи так:

var xmldoc:TXmlDocument;
    node:IXmlDocument;
begin
 xmldoc.LoadFromFile("SCDA.xml");
 node:= xmldoc.ChildNodes.Nodes["section"];
 str:= vartostr(node.childdocument.nodes["text"].NodeValue); //- здесь при выполнении вылетает ошибка
end;


 
brother ©   (2010-04-01 12:06) [3]

> Вообще, суть не в этом

ты уверен?


 
Delp ©   (2010-04-01 12:27) [4]

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

var xmldoc:TXmlDocument;
   node:IXmlnode;
   str:string;
begin
XMLDoc := TXMLDocument.Create(Application);
XMLDoc.Active := True;
xmldoc.LoadFromFile("1.xml");
node:= xmldoc.ChildNodes.Nodes["section"];
str:= vartostr(node.childnodes.nodes["text"].NodeValue); //- здесь при выполнении вылетает ошибка


 
Медвежонок Пятачок ©   (2010-04-01 12:27) [5]


Q >на какой узел указывает node?
A >Вообще, суть не в этом


Q: Как правильно отпарсить такого вида тэг?

Вообще, суть не в этом, а есть ли жизнь на марсе.
Вот в чем суть.


 
Медвежонок Пятачок ©   (2010-04-01 12:28) [6]

NodeValue - это значение атрибута.

Атрибутов у твоего документа нет ни одного


 
Delp ©   (2010-04-01 12:29) [7]

Соответственно node указывает на <section>.


 
Delp ©   (2010-04-01 12:29) [8]

Нет, значение атрибута получается функцией GetAttribute.


 
Медвежонок Пятачок ©   (2010-04-01 12:30) [9]

ГетАттрибуте возвращает ссылку на атрибут, а не его значение.


 
Медвежонок Пятачок ©   (2010-04-01 12:38) [10]

Имеем ixmlnode и читаем его свойство NodeValue

В зависимости от того, чем является узел получаем: (встроенная документация)

ntAttribute The attribute value
ntElement If the element contains only text, this is that text value. Otherwise, trying to read or set NodeValue causes an exception.
....


 
Delp ©   (2010-04-01 13:47) [11]

GetAttribute  Returns the value of one of this node"s attributes.  
Это из справки.


 
Медвежонок Пятачок ©   (2010-04-01 13:58) [12]

это из справки по какому классу?


 
Delp ©   (2010-04-01 14:01) [13]


> это из справки по какому классу?

ixmlnode


 
Медвежонок Пятачок ©   (2010-04-01 14:02) [14]

GetAttribute  Returns the value of one of this node"s attributes.  

И какого атрибута значение ты надеешься при этом получить?
Тебе же русским языком сказали,
что атрибутов в твоем документе нет ни одного


 
Delp ©   (2010-04-01 14:07) [15]

), так я атрибут и не пытаюсь получить, я пытаюсь получить то что находится в <text></text>, а выдаётся ошибка, так как существуют внутренние тэги.


 
Медвежонок Пятачок ©   (2010-04-01 14:08) [16]

тогда снова см. [10]


 
Дмитрий Белькевич   (2010-04-01 14:10) [17]


> что атрибутов в твоем документе нет ни одного


Общая идея: сообщениям компьютера стоит верить.


 
Delp ©   (2010-04-01 14:11) [18]

эмм... мало о чём говорит...


 
Медвежонок Пятачок ©   (2010-04-01 14:23) [19]

эмм... мало о чём говорит...

<Цитата>


Говорит мало, но достаточно для того, чтобы понять, что не стоит читать свойство НодеВалуе у узла, имеющего чайлд-узлы, ибо
Otherwise, trying to read or set NodeValue causes an exception.


 
Дмитрий Белькевич   (2010-04-01 14:24) [20]

Гугль не поможет?

http://www.google.com.by/search?client=opera&rls=ru&q=GetAttribute+Returns+the+value+of+one+of+this+node"s+attributes.&sourceid=opera&ie=utf-8&oe=utf-8


 
Медвежонок Пятачок ©   (2010-04-01 14:25) [21]

вообще-то должна была помочь сама иде, через интеллисенс.
там же после точки предлагаются все свойства, а не только NodeValue



Страницы: 1 вся ветка

Текущий архив: 2011.10.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.007 c
15-1309764636
Andy BitOff
2011-07-04 11:30
2011.10.30
Кто как решает задачу...


15-1309954783
dest81
2011-07-06 16:19
2011.10.30
select, sum как правильней


11-1239086827
MTsv DN
2009-04-07 10:47
2011.10.30
Мозговой штурм


15-1309527475
Chatnick
2011-07-01 17:37
2011.10.30
Ассоциация ICO-файла с программой.


15-1309608613
снусмумрик
2011-07-02 16:10
2011.10.30
Комментарии для закачки uTorrent