MS XML 3.0 -> Не работает selectNodes (VB.NET (Vis

 
0
 
XML, XSL
ava
ansen | 23.03.2013, 21:12
имеем 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
Утверждают, что должно работать
Comments (2)
ava
diadiavova | 23.03.2013, 20:39 #
Попробуй так

//PL[ULID/text() = '1']
Хотя по идее твой вариант тоже должен работать.
А кстати, почему в вбнет используешь мсхмл? Там же собственные хмл апи есть.
ava
diadiavova | 23.03.2013, 23:23 #
Посмотрел пример на 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>
========================================
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit