Просматривать узлы в XmlNodeList (vb.net) - PullRequest
0 голосов
/ 09 мая 2018

Я не могу найти в документации, как "просматривать" узлы, которые у меня уже есть в XmlNodeList.

Учитывая этот XML:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE tmx SYSTEM "tmx14.dtd">
<tmx version="1.4">
  <tu changedate="20180509T145123Z" creationdate="20180509T145123Z" >
    <prop type="aligned">no</prop>
    <prop type="x-context">320920</prop>
    <tuv xml:lang="en-gb">
      <seg>Hello1</seg>
    </tuv>
    <tuv xml:lang="es">
      <seg>Hola1</seg>
    </tuv>
  </tu>
  <tu changedate="20180509T145216Z" creationdate="20180509T145216Z" >
    <prop type="aligned">no</prop>
    <prop type="x-context">325152</prop>
    <tuv xml:lang="en-gb">
      <seg>Hello2</seg>
    </tuv>
    <tuv xml:lang="es">
      <seg>Hola2</seg>
    </tuv>
  </tu>
</tmx>

Я пытаюсь запустить разные узлы в каждом / ту, чтобы загрузить это в БД. Должно быть просто, но я борюсь с синтаксисом.

Пока у меня есть это:

Dim tmxfile As String = "d:\Documents\Desktop\myxml.xml"
        Dim xmldoc As New XmlDocument
        xmldoc.Load(tmxfile)

        Dim nodes As XmlNodeList = xmldoc.DocumentElement.SelectNodes("//tu")

        For node = 0 To nodes.Count - 1
            Dim x = nodes.Item(node).SelectNodes("/seg")

            MsgBox(x.ToString)
        Next
    End Sub

Чего я пытаюсь добиться, так это показать каждый / seg в // tu. Первая часть кода в порядке, как будто я перебираю узел с помощью innerxml или innertext, я вижу фактические элементы XML, но я изо всех сил пытаюсь получить указанные элементы на этих узлах.

Любое руководство?

Заранее спасибо!

1 Ответ

0 голосов
/ 09 мая 2018

Если бы вы использовали XDocument вместо XmlDocument, вы могли бы использовать уникальную функцию VB - XML-литералы :

Sub Main()

    Dim xml =
<?xml version="1.0" encoding="utf-8"?>
<tmx version="1.4">
    <tu changedate="20180509T145123Z" creationdate="20180509T145123Z">
        <prop type="aligned">no</prop>
        <prop type="x-context">320920</prop>
        <tuv xml:lang="en-gb">
            <seg>Hello1</seg>
        </tuv>
        <tuv xml:lang="es">
            <seg>Hola1</seg>
        </tuv>
    </tu>
    <tu changedate="20180509T145216Z" creationdate="20180509T145216Z">
        <prop type="aligned">no</prop>
        <prop type="x-context">325152</prop>
        <tuv xml:lang="en-gb">
            <seg>Hello2</seg>
        </tuv>
        <tuv xml:lang="es">
            <seg>Hola2</seg>
        </tuv>
    </tu>
</tmx>

    xml.AddFirst(New XDocumentType("tmx", "SYSTEM", "tmx14.dtd", ""))

    ' All <tu> elements
    Dim tus = xml.<tmx>.<tu>

    For Each tu In tus
        Dim seg = tu.<tuv>.<seg>
        Console.WriteLine(seg.Value)
    Next

    Console.ReadKey(True)

End Sub
...