Страницы: 1
RSS
парсинг XML: надо выбрать атрибуты из конкретной группы
 
Доброго дня, уважаемые коллеги!
Прошу помощи по работе с XML. Вопрос срочный, а я еще с этой областью почти не работал.
Суть проблемы: есть xml-файл. в нем сидит напр. такая структура
Код
<ggg1>
       <param>_____</param>
</ggg1>
<fff2>
       <param>_____</param>
</fff2>
<kkk3>
       <param>_____</param>
</kkk3>
как вытащить значение param из второго блока (<fff2>  ;)  ?
в коде подключаю
Код
CreateObject("MSXML2.DOMDocument")

P.S.: и поделитесь ссылочкой на хорошую справку по работе с xml. желательно русифицированную. Спасибо
Учимся сами и помогаем другим...
 
Работать с XML очень просто
примерно так:
Код
set XML = CreateObject("MSXML2.DOMDocument") 
XML.load "полный путь к файлу XML" 
result$ = XML.documentelement.selectsingleNode("//fff2/param").text
код не проверял, могут быть ошибки

то, что в кавычках - это запрос в XML структуре, на языке XPath
в этом конкретном случае - запрос очень простой
если надо будет посложнее запрос сделать: хороший ресурс по Xpath с примерами
 
Игорь,спасибо! Все заработало. Я конечно понимал, что решение элементарное, но тут конечно верх простоты )))
и за ссылку спасибо.
Учимся сами и помогаем другим...
 
Подскажите пожалуйста как вытащить значения <value> ?
например XML.DocumentElement.SelectSingleNode("//housing/value").Text
возвращает значение только одного элемента, а как получить остальные?

Код
-<f5:livingAddress>
-<russianAddress>
<addressObjectString>Москва г$$$$$Скобелевская ул</addressObjectString>
-<housing>
-<type>
<type>addressObjectType</type>
<element>1202</element>
</type>
<value>1</value>
</housing>
-<housing>
-<type>
<type>addressObjectType</type>
<element>1304</element>
</type>
<value>45</value>
</housing>
-<housing>
-<type>
<type>addressObjectType</type>
<element>1203</element>
</type>
<value>5</value>
</housing>
</russianAddress>
</f5:livingAddress>
Изменено: DenisZ - 12.05.2016 16:18:15
 
используйте SelectNodes
Учимся сами и помогаем другим...
 
а на примере можете показать?  с синтаксисом не могу разобраться(  
 
Цитата
DenisZ написал: а на примере можете показать?
так вы пример не приложили, чтобы исправить и оттестить
Цитата
DenisZ написал: возвращает значение только одного элемента, а как получить остальные?
покажите что есть, в файле (согласно Правил форума)
P.S. линк из #2 не упускайте из виду
Изменено: JeyCi - 12.05.2016 20:03:03
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Доброе время суток
Цитата
DenisZ написал: а на примере можете показать?
Сходите сюда Сценарии объектной модели документа DOM XML, ищите SelectNodes - будут вам и описание и примеры. Что же вы поиском то не пользуетесь?
Успехов.
 
Цитата
Андрей VG написал: Что же вы поиском то не пользуетесь?
Поиском пользуюсь, но опыта и знаний не хватает (
посмотрите пожалуйста пример во вложении.
Из файла с данными о клиенте получается вытащить всю основную информацию, кроме, подробного адреса (квартира, корпус, и тд.)
С помощью SelectSingleNode получается достать только первый элемент (номер дома)
А как пользоваться SelectNodes не разобрался

пример и файлы с данными во вложении помогите пожалуйста!
 
В зависимости от значения типа определяется номера дома корпуса и т.д
С ними сами разбирайтесь
Код
    Set XML = CreateObject("MSXML2.DOMDocument")
    XML.Load fil$
    Set varX = XML.DocumentElement.SelectNodes("//housing")
    Sl$ = ""
    For Each Item In varX
        Тип = Item.FirstChild.LastChild.Text
        Sl$ = Sl$ & "Тип=" & Тип & " значение=" & Item.LastChild.Text
    Next
 
Цитата
Doober
Большое спасибо!
 
Столкнулся с похожей задачей. Дано XML node:
Код
<aaa> <ddd> eee="1" </ddd> </aaa>
<bbb> <ddd> eee="2" </ddd> </bbb>
<ccc> <ddd> eee="3" </ddd> </ccc>
Нужно достать "eee" в блоке "bbb", далее "ddd". Решение без цикла, без перебора:
Код
директория = "bbb"
поддиректория = "ddd"
показатель = "eee"
Set node01 = node.SelectSingleNode("//" & директория)
Set node02 = node01.SelectSingleNode(поддиректория)
значение = node02.Attributes.getNamedItem(показатель).Text

Может кому пригодится.

Страницы: 1
Читают тему
Наверх