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

Вниз

Как получить следующие 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.013 c
2-1248255936
Bruth
2009-07-22 13:45
2009.09.27
Помогите сделать поиск всех папок в папке


2-1248344261
tomkat
2009-07-23 14:17
2009.09.27
чтение DBF побайтно


4-1217571568
mistic
2008-08-01 10:19
2009.09.27
непростое контекстное меню


4-1199933532
KiberKot
2008-01-10 05:52
2009.09.27
эмуляция нажатия клавиш в неактивном окне


1-1218019601
TNT
2008-08-06 14:46
2009.09.27
OleConteiner - печать документа