Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.004 c
15-1248936484
123123
2009-07-30 10:48
2009.09.27
rsync


15-1248467415
Юрий
2009-07-25 00:30
2009.09.27
С днем рождения ! 25 июля 2009 суббота


2-1248344765
Bruth
2009-07-23 14:26
2009.09.27
Вывести в переменную выделенный мышкой текст в ричЕдите


6-1207390865
Max
2008-04-05 14:21
2009.09.27
UDP


15-1248533265
Kolan
2009-07-25 18:47
2009.09.27
«Интерфейс пользователя» &amp;#8594; TEdit вместо TLabel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский