:: Visual Foxpro, Foxpro for DOS
Добраться до вложенных тегов XML
Божья_коровка
Автор

Сообщений: 25720
Дата регистрации: 23.08.2001
Как добраться до информации во вложенных тегах вот такой структуры -
<тег1>
<тег2>
<тег3>
<тег4>
<тег4.1 с данными>
<тег4.2 с данными>
<тег4>
<тег3>
<тег2>
<тег1>

нужно вытащить <тег4.1 с данными>
Посмотрела примеры на форуме, но что то я не могу справится с такой вложенностью с помощью getElementsByTagName... или туплю...

Пробую вот так -

IF FILE(lcXmlFile)
xmlDoc = CreateObject("Msxml.DOMDocument")
xmlDoc.async = .F.
IF xmlDoc.Load(lcXmlFile)
node_List = xmlDoc.getElementsByTagName("тег 4")
FOR intIndex = 1 TO node_List.Length
xmlNode = node_List.Item(intIndex-1).CloneNode(.T.)
MESSAGEBOX(xmlNode.childNodes(0).text)
ENDFOR
ENDIF
ENDIF

node_List.Length получается 0 при таком подходе...


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...




Исправлено 2 раз(а). Последнее : Божья_коровка, 14.11.19 11:38
Ratings: 0 negative/0 positive
Re: Добраться до вложенных тегов XML
AndyNigmatec

Сообщений: 1552
Откуда: Волгоград
Дата регистрации: 28.06.2015
Попробуйте так:

IF FILE(lcXmlFile)
xmlDoc = CreateObject("Msxml.DOMDocument")
xmlDoc.async = .F.
IF xmlDoc.Load(lcXmlFile)
node_List = xmlDoc.selectNodes("//тег4")
FOR intIndex = 1 TO node_List.Length
xmlNode = node_List.Item(intIndex-1).CloneNode(.T.)
?xmlNode.getElementsByTagName("тег4.1").Item(0).text
ENDFOR
ENDIF
ENDIF



Исправлено 1 раз(а). Последнее : AndyNigmatec, 14.11.19 13:35
Ratings: 0 negative/0 positive
Re: Добраться до вложенных тегов XML
Божья_коровка
Автор

Сообщений: 25720
Дата регистрации: 23.08.2001
AndyNigmatec
Попробуйте так:
Так тоже node_List.Length = 0, в цикл не заходит.

Сделала так -
node_List = xmlDoc.getElementsByTagName("тег1")
FOR intIndex = 1 TO node_List.Length
xmlNode = node_List.Item(intIndex-1).CloneNode(.T.)
MESSAGEBOX(xmlNode.lastChild.text)
ENDFOR
Тег4 получается последний поэтому lastChild... Но тут блин засада, он же полностью текст выдает, а мне все значения этого тега не нужны, они мне выборочно только нужны. Из этого тега надо выбрать к примеру, тег 4.2, тег 4.6 и тег 4.8. Сам xml приходит большей с кучей инфы, которая мне нужна только частично. Т.е. мне из него нужно подергать только выборочно информацию.


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...




Исправлено 1 раз(а). Последнее : Божья_коровка, 14.11.19 14:14
Ratings: 0 negative/0 positive
Re: Добраться до вложенных тегов XML
AndyNigmatec

Сообщений: 1552
Откуда: Волгоград
Дата регистрации: 28.06.2015
А вы дайте кусочек исходного xml ...

блин... ошибку допустил выше в коде ... звездочку забыл (((
IF FILE(lcXmlFile)
xmlDoc = CreateObject("Msxml.DOMDocument")
xmlDoc.async = .F.
IF xmlDoc.Load(lcXmlFile)
node_List = xmlDoc.selectNodes("*//тег 4")
FOR intIndex = 1 TO node_List.Length
xmlNode = node_List.Item(intIndex-1).CloneNode(.T.)
?xmlNode.getElementsByTagName("тег4.1").Item(0).text
ENDFOR
ENDIF
ENDIF



Исправлено 1 раз(а). Последнее : AndyNigmatec, 14.11.19 14:26
Ratings: 0 negative/0 positive
Re: Добраться до вложенных тегов XML
Божья_коровка
Автор

Сообщений: 25720
Дата регистрации: 23.08.2001
AndyNigmatec
А вы дайте кусочек исходного xml ...
блин... ошибку допустил выше в коде ... звездочку забыл (((
Со звездочкой тоже не получается, я так уже пробовала
Сейчас дом кусок, обезличу только.


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...
Ratings: 0 negative/0 positive
Re: Добраться до вложенных тегов XML
Божья_коровка
Автор

Сообщений: 25720
Дата регистрации: 23.08.2001
См. архив в аттаче...

Хочу добраться до тега ADDRESSES-->ADDRESS--> и тут выборочно, к примеру их тега COUNTRY выбрать только значение тега VALUE.
Т.е. разбирать полностью файл мне не надо, а просто подёргать выборочно данные с разных тегов. И я застряла именно на тегах с большой вложенностью.


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...




Исправлено 1 раз(а). Последнее : Божья_коровка, 14.11.19 14:41
Ratings: 0 negative/0 positive
Re: Добраться до вложенных тегов XML
AndyNigmatec

Сообщений: 1552
Откуда: Волгоград
Дата регистрации: 28.06.2015
вобщем топорно получилось у меня, но вроде то что нужно вам дергает ...

lcXmlFile='...\xml\test.xml'
IF FILE(lcXmlFile)
xmlDoc=CREATEOBJECT("MSXML2.DOMDocument")
xmlDoc.async = .F.
IF xmlDoc.Load(lcXmlFile)
node_List = xmlDoc.selectNodes("*//field")
* ?node_List.Length
FOR intIndex = 1 TO node_List.Length
IF node_List.item(intIndex-1).attributes(0).text=="COUNTRY"
xmlNode=node_List.item(intIndex-1).childNodes
FOR intIndex2 = 1 TO xmlNode.length
IF xmlNode.item(intIndex2-1).attributes(0).text=="VALUE"
?xmlNode.item(intIndex2-1).text
* ?node_List.item(intIndex-1).text
ENDIF
ENDFOR
ENDIF
ENDFOR
ENDIF
ENDIF
Ratings: 0 negative/0 positive
Re: Добраться до вложенных тегов XML
Божья_коровка
Автор

Сообщений: 25720
Дата регистрации: 23.08.2001
А почему 3 раза? в теге COUNTRY по той вложенности, что я писала только 1 тег VALUE....Ты ж все теги COUNTRY прочитал во всей структуре...
Ведь нужно не все их подряд читать, а именно тот который нужен, в нужной вложенности...Я поэтому и встряла с этой задачей. Я не могу понять как это этим чайлднодам дойти до нужной мне вложенности.


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...




Исправлено 3 раз(а). Последнее : Божья_коровка, 14.11.19 16:52
Ratings: 0 negative/0 positive
Re: Добраться до вложенных тегов XML
vk65

Сообщений: 402
Дата регистрации: 08.04.2008
Божья_коровка
как это этим чайлднодам дойти до нужной мне вложенности.
lcXmlFile = "test.xml"
loXDOM = CREATEOBJECT('MSXML2.DOMDocument')
loXDOM.async = .F.
if loXDOM.Load(lcXmlFile)
loNode = loXDOM.selectNodes("*//field")
if get_node(@loNode, "ADDRESSES") ;
.and. get_node(@loNode, "ADDRESS") ;
.and. get_node(@loNode, "COUNTRY") ;
.and. get_node(@loNode, "VALUE", .T.)
?loNode.text
endif
endif
function get_node
lparameters toNode, tcAttr, tlRg
for i = 0 to toNode.Length - 1
if toNode.item(i).attributes(0).text == tcAttr
if !tlRg
toNode = toNode.item(i).childNodes
else
toNode = toNode.item(i)
endif
return
endif
endfor
return .F.
Ratings: 0 negative/1 positive
Re: Добраться до вложенных тегов XML
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
xmlDoc.selectSingleNode('//field[@name="ADDRESSES"]/field[@name="ADDRESS"]/field[@name="COUNTRY"]/field[@name="VALUE"]/text()').nodeValue


------------------
WBR, Igor
Ratings: 0 negative/2 positive
Re: Добраться до вложенных тегов XML
AndyNigmatec

Сообщений: 1552
Откуда: Волгоград
Дата регистрации: 28.06.2015
Игорь красава!

lcXmlFile='...\xml\test.xml'
IF FILE(lcXmlFile)
xmlDoc=CREATEOBJECT("MSXML2.DOMDocument")
xmlDoc.async = .F.
IF xmlDoc.Load(lcXmlFile)
node_List = xmlDoc.selectNodes('*//field[@name="ADDRESSES"]/field[@name="ADDRESS"]/field[@name="COUNTRY"]/field[@name="VALUE"]')
?node_List.Length
FOR intIndex = 1 TO node_List.Length
?node_list.item(intIndex-1).text
ENDFOR
ENDIF
ENDIF



Исправлено 1 раз(а). Последнее : AndyNigmatec, 15.11.19 07:43
Ratings: 0 negative/2 positive
Re: Добраться до вложенных тегов XML
Божья_коровка
Автор

Сообщений: 25720
Дата регистрации: 23.08.2001
УРА :bodr:

Спасибо Игорю за наставление на путь истинный! :danc:


Спасибо AndyNigmatec и vk65, что помогли разобраться, теперь я знаю, как добираться до нужной мне инфы


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...
Ratings: 0 negative/0 positive
Re: Добраться до вложенных тегов XML
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
ИК крут, конечно, помнить этот птичий язык (XPath)
docs.microsoft.com
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 32 (Гостей: 32)

© 2000-2024 Fox Club 
Яндекс.Метрика