Текущий архив: 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