Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MS XML 3.0 -> Не работает selectNodes (VB.NET (Vis, MS XML 3.0 -> Не работает selectNodes  
:(
    Опции темы
ansen
  Дата 23.3.2013, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.2.2003

Репутация: нет
Всего: нет



имеем XML:
Код

<?xml version="1.0" encoding="utf-8"?>
<ExchangeFile>
  <InfoPart>
    <MetricInfo>
      <Polyline>
        <PL>
          <ULID>1</ULID>
          <Points>
            <P>5</P>
            <P>4</P>
            <P>3</P>
          </Points>
          <Length>41.927191342689</Length>
        </PL>
        <PL>
          <ULID>2</ULID>
          <Points>
            <P>12</P>
            <P>5</P>
          </Points>
          <Length>25.7975192605793</Length>
        </PL>
        <PL>
          <ULID>3</ULID>
          <Points>
            <P>24</P>
            <P>12</P>
          </Points>
          <Length>2.07002415444641</Length>
        </PL>
      </Polyline>
    </MetricInfo>
  </InfoPart>
</ExchangeFile>


В VB.NET (Visual Studio 10) код:
  
Код

  Dim doc As New MSXML2.DOMDocument
  doc.load("<путь к файлу что выше>")
  Dim ULIDNodeList As MSXML2.IXMLDOMNodeList, NodeLine As  MSXML2.IXMLDOMNode
  ULIDNodeList = doc.selectNodes("//PL[ULID='1']")
  NodeLine = ULIDNodeList.item(0)

  While Not NodeLine Is Nothing
        Debug.Print(NodeLine.firstChild.firstChild.nodeValue)
        nodeLine = NodeLine.nextSibling
  End While


Должно бы выдать только первый <PL>, а выдает все 3!
В чем ошибаюсь?
на http://stackoverflow.com/questions/1291067...entire-document
Утверждают, что должно работать

PM MAIL   Вверх
diadiavova
Дата 23.3.2013, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Попробуй так
Код

//PL[ULID/text() = '1']
Хотя по идее твой вариант тоже должен работать.
А кстати, почему в вбнет используешь мсхмл? Там же собственные хмл апи есть.

Добавлено через 13 минут и 18 секунд
Судя по всему проблема именно в использовании мсхмл 3.0
http://us.generation-nt.com/answer/differe...p-73515102.html


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
diadiavova
Дата 23.3.2013, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Посмотрел пример на SO, там используются родные дотнетовские апи
http://msdn.microsoft.com/ru-ru/library/system.xml.aspx
http://msdn.microsoft.com/ru-ru/library/sy...mldocument.aspx
Так же можно использовать это пространство имен
http://msdn.microsoft.com/ru-ru/library/system.xml.linq.aspx
Это даже удобнее, поскольку есть поддержка на уровне языка. Приведу пример консольного приложения
Код

Imports System.Xml.XPath
Module Module1

    Dim document As XDocument =
        <?xml version="1.0" encoding="utf-8"?>
        <ExchangeFile>
            <InfoPart>
                <MetricInfo>
                    <Polyline>
                        <PL>
                            <ULID>1</ULID>
                            <Points>
                                <P>5</P>
                                <P>4</P>
                                <P>3</P>
                            </Points>
                            <Length>41.927191342689</Length>
                        </PL>
                        <PL>
                            <ULID>2</ULID>
                            <Points>
                                <P>12</P>
                                <P>5</P>
                            </Points>
                            <Length>25.7975192605793</Length>
                        </PL>
                        <PL>
                            <ULID>3</ULID>
                            <Points>
                                <P>24</P>
                                <P>12</P>
                            </Points>
                            <Length>2.07002415444641</Length>
                        </PL>
                    </Polyline>
                </MetricInfo>
            </InfoPart>
        </ExchangeFile>


    Sub Main()
        Dim elements = document.XPathSelectElements("//PL[ULID = '1']")

        For Each element As XElement In elements
            Console.WriteLine(element.ToString)
            Console.WriteLine(New String("=", 40))
        Next
        Console.ReadKey()
    End Sub



End Module



Выводит
Код

<PL>
  <ULID>1</ULID>
  <Points>
    <P>5</P>
    <P>4</P>
    <P>3</P>
  </Points>
  <Length>41.927191342689</Length>
</PL>
========================================



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.