Форум: "Основная";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];
ВнизКак получить следующие XML значения ? Найти похожие ветки
← →
МистерТ (2008-07-21 14:20) [0]Здравствуйте!
Столкнулся с достаточно глупой проблемой :(
В XMLDocument загружен файл и в нем есть следующие строки:<body>
<data value="some data"/> <!-- connent -->
<data value="another data"/>
</body>
Как получить доступ к тегу value ?
Через ChildNodes["data"].Attributes["value"] данные получить можно, но только для первого параметра. Замена ChildNodes["1"].XML вообще дает строку содержащую комментарий.
Заранее благодарю за ответы.
← →
Медвежонок Пятачок © (2008-07-21 14:27) [1]Замена ChildNodes["1"].XML вообще дает строку содержащую комментарий.
Ну все верно. Это чайлд с индексом 1
← →
МистерТ (2008-07-21 14:39) [2]> Медвежонок Пятачок © (21.07.08 14:27) [1]
> Замена ChildNodes["1"].XML вообще дает строку содержащую
> комментарий.
>
> Ну все верно. Это чайлд с индексом 1
Ну как бы может и верно, но как получить доступ к value при такой сокращенной форме <.../> ?
← →
Медвежонок Пятачок © (2008-07-21 14:42) [3]форма-то здесь причем?
тебе нужен второй пофик какой чайлд.
либо первый (считая с нуля) чайлд с именем "дата"
Первое доступно в TXMLDocument
Второе в IXMLDOMDocument2 понимающем XPATH
← →
Медвежонок Пятачок © (2008-07-21 14:43) [4]selectsinglenode("/body/data[1]/@value") вернет атрибут value нужного тебе нода
← →
МистерТ (2008-07-21 14:53) [5]> Медвежонок Пятачок © (21.07.08 14:42) [3]
Ты меня кажется не понял :)
Вот смотри:
В TXMLDocument загружен файл содержащий следующее:<body>
<data value = "some value"/> <!-- comment -->
<data value = "another value">
<child value = "some text 1">
some text 2
</child>
</body>
черезChildNode["child"].Attributes["value"]
доступенsome text 1
, а черезChildNode["child"].Text
-some text 2
.
Но вот с тэгами data возникает ерунда.ChildNode["data"].Attribute["value"]
=some value
и все, а если перебрать по индексамChildNode[1].Attributes["value"]
-> EVariantCastError (NULL -> String)
Далее пробуем экспериментировать:ChildNode[1].XML
="<!-- comment -->"
ChildNode[1].Text
=comment
Как все-таки вытянутьvalue
из обоихdata
???
← →
Медвежонок Пятачок © (2008-07-21 14:55) [6]совсем тормоз что ли?
Через ChildNodes["data"].Attributes["value"] данные получить можно, но только для первого параметра. Замена ChildNodes["1"].XML вообще дает строку содержащую комментарий.
ChildNodes["2"].XML
← →
МистерТ (2008-07-21 14:56) [7]> selectsinglenode("/body/data[1]/@value") вернет атрибут
> value нужного тебе нода
Сейчас гляну...
Значит средствами XMLDocument - ни как...буду знать...
← →
Медвежонок Пятачок © (2008-07-21 14:57) [8]ChildNode[1].Attributes["value"] -> EVariantCastError (NULL -> String)
У нода есть тип.
В том числе тип "комментарий"
Для того, чтобы у коментариев атрибуты не читали.
А у Attributes есть count
← →
МистерТ (2008-07-21 14:58) [9]> Медвежонок Пятачок © (21.07.08 14:55) [6]
> совсем тормоз что ли?
Я бы по просил повежливее.
> ChildNodes["2"].XML
Сам-то понял что написал ?
Мне узел с именем 2 не нужен...
З.Ы. кстати тебе процитировать, что Делфи напишен на такое ?
← →
Медвежонок Пятачок © (2008-07-21 14:58) [10]Значит средствами XMLDocument - ни как...буду знать...
Что никак?
Как. Только из поисковых средств там только навигационные.
Вот и все.
← →
Медвежонок Пятачок © (2008-07-21 14:59) [11]Сам-то понял что написал ?
тебе нужен чайлд с индексом ДВА а не один.
под единицей там коммент.
← →
МистерТ (2008-07-21 15:01) [12]> Медвежонок Пятачок © (21.07.08 14:59) [11]
> Сам-то понял что написал ?
>
> тебе нужен чайлд с индексом ДВА а не один.
> под единицей там коммент.
Мля, нет же.
Мне нужен атрибут чайлда под номером два, но из-за сокращенной формы<data ... />
вместо<data ...></data>
получить атрибут стандартными свойствами не получается...
← →
Медвежонок Пятачок © (2008-07-21 15:03) [13]ChildNodes : IXMLNodeList
property Nodes[const IndexOrName: OleVariant]: IXMLNode; default;
Для тех кто доку из танка читать не может.
"2" привелось просто к двойке
← →
Медвежонок Пятачок © (2008-07-21 15:04) [14]Мне нужен атрибут чайлда под номером два, но из-за сокращенной формы
<data ... />
вместо
<data ...></data>
получить атрибут стандартными свойствами не получается...
Сокращенная форма здесь не причем.
И узел, который тебе нужен не два. Коментарий это точно такой же узел как и все другие.
И в спике childnodes он присутствует.
← →
Медвежонок Пятачок © (2008-07-21 15:07) [15]перечисли через ShowMessage в цикле все чайлды узла дата и все увидишь.
Имя, тип и так далее
← →
МистерТ (2008-07-21 15:12) [16]> "2" привелось просто к двойке
EOleException with message "This name may not begin with the "2" charapter -->2<--"
Комментарий тут просто для примера.
И сокращенная форма играет роль, т.к. не меня кодChildNode[1].Attributes["value"]
но меняя XML на полную форму я получаю либо рабочий вариант, либо EVariantCastError.
← →
Медвежонок Пятачок © (2008-07-21 15:14) [17]На, удивись.
procedure TForm1.Button1Click(Sender: TObject);
var root : IXMLNode; i : integer;
begin
XMLDocument1.LoadFromFile("C:\test.xml");
root := XMLDocument1.ChildNodes[0];
Caption := Root.NodeName;
for i := 0 to Pred(Root.ChildNodes.Count) do
showmessage(root.ChildNodes.Nodes[i].NodeName);
//вот значение твоего атрибута value второго нода data
ShowMessage(root.ChildNodes[2].Attributes["value"]);
end;
← →
Медвежонок Пятачок © (2008-07-21 15:15) [18]структура скопирована из твоего вопроса один в один.
← →
Медвежонок Пятачок © (2008-07-21 15:15) [19]И сокращенная форма играет роль, т.к. не меня код
Для одаренных:
Не меняет она ничего.
← →
Медвежонок Пятачок © (2008-07-21 15:20) [20]И сокращенная форма играет роль, т.к. не меня код
ChildNode[1].Attributes["value"] но меняя XML на полную форму я получаю либо рабочий вариант, либо EVariantCastError.
меняя код на полную ты сам того не замечая структуру меняешь и твой комент видимо уплывает из чайлдов data в чайлды боди.
Либо еще куда. Без фотографии не лечим.
← →
Медвежонок Пятачок © (2008-07-21 15:22) [21]Кстати еще фик поймешь по твоему коду чьи именно чайлды ты опрашиваешь
← →
Медвежонок Пятачок © (2008-07-21 15:30) [22]Вот так что ли полная форма "влияет"?
<body>
<data value="some data"> <!-- connent -->
</data>
<data value="another data"/>
</body>
Так у тебя комент стал чайлдом первого узла "data". А в исходном примере он был чайлдом ула "body"
И никакая "полная" форма ни на что не "повлияла"
Структура поменялась и все.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.005 c