XMLDocument - Нужна помощь!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

XMLDocument - Нужна помощь!

Сообщение kibernetics » 05.04.2009 (Вс) 2:39

Есть важные вопросы связанные с XMLDocument.
Есть XML, примерно такого плана:
Код: Выделить всё
...
<tag1>
  <prop>
    <style val="Header"/>
  </prop>
  <data>
    <text>EXAMPLE HEADER TEXT</text>
  </data>
</tag1>
  <tag1>
    <prop>
      <style val="Main"/>
    </prop>
    <data>
      <text>EXAMPLE MAIN TEXT</text>
    </data>
  </tag1>
  <tag1>
    <prop>
      <style val="Content"/>
    </prop>
    <data>
      <text>EXAMPLE CONTENT TEXT</text>
    </data>
  </tag1>
  ...


Подскажите, как перебрать все теги, чтобы найти в них тег style с атрибутом val="Main"?
И затем, в случае нахождения этого тега, то под ним добавить ещё один тег со значением <align val="center">,
и плюс ко всему изменить текст в теге <text> общего узла.
В итоге XML должен получится в таком виде:
Код: Выделить всё
  ...
  <tag1>
  <prop>
    <style val="Header"/>
  </prop>
  <data>
    <text>EXAMPLE HEADER TEXT</text>
  </data>
</tag1>
  <tag1>
    <prop>
      <style val="Main"/>
      <align val="center"/>   '<--- ДОБАВИЛИ ТЕГ
    </prop>
    <data>
      <text>!EDITED TEXT!</text>   '<--- ОТРЕДАКТИРОВАЛИ ЗНАЧЕНИЕ
    </data>
  </tag1>
  <tag1>
    <prop>
      <style val="Content"/>
    </prop>
    <data>
      <text>EXAMPLE CONTENT TEXT</text>
    </data>
  </tag1>
  ...

Подскажите, кто чем может. Очень нужно решить. Хочу использовать через объект XMLDocument. Но, не выходит ничего. Не могу разобраться.

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Re: XMLDocument - Нужна помощь!

Сообщение BION » 05.04.2009 (Вс) 8:19

Примерно так:
Код: Выделить всё
dim node as MSXML2.IXMLDOMElement
dim new_node as MSXML2.IXMLDOMElement

xmlDoc.setProperty "SelectionLanguage", "XPath"

' по заданному пути находим тэг "style" где атрибут "val" имеет значение "Main"
Set node = xmlDoc.selectSingleNode("//root/tag1/prop/style[@val='Main']")

' поднимаемся на уровень выше
set node = node.parentNode

' создаем и добавляем новый элемент
set new_node = node.appendChild(xmlDoc.createElement("align"))

' добавляем атрибут со значением
new_node.setAttribute "val", "center"


А вообще:
http://ru.wikipedia.org/wiki/XPath
http://xml.nsu.ru/dom/dom_home.xml
Буээ!

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: XMLDocument - Нужна помощь!

Сообщение kibernetics » 05.04.2009 (Вс) 11:37

Тэк-с, спасибо друг, уже кое-что начинает прояснятся. :scratch:
Пока алгоритм таков:
1. нашёл тег style val='Main'
2. определил родителя
3. определил родителя
4. получил значение тега text

А как можно отредактировать текст в теге?

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Re: XMLDocument - Нужна помощь!

Сообщение BION » 05.04.2009 (Вс) 13:30

kibernetics писал(а):А как можно отредактировать текст в теге?

Код: Выделить всё
node.text = "abc"
Буээ!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Re: XMLDocument - Нужна помощь!

Сообщение RayShade » 06.04.2009 (Пн) 8:14

А можно сделать оптимальнее :)
Код: Выделить всё
Dim nodeList As IXMLDomNodeList
Set nodeList = xmlDoc.selectNodes("//root/tag1/prop[./style[@val='Main']]")
' Более понятный синтаксис
Set nodeList = xmlDoc.selectNodes("//root/tag1/prop[child::style[attribute::val='Main']]")

Dim node As IXMLDomNode
For Each node in nodeList
' Ну тут уже создаем новые ноды и добавляем их прямо в node :)
Next node
I don't understand. Sorry.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 45

    TopList