Классический ASP синтаксический анализ XML - PullRequest
0 голосов
/ 01 июля 2018
<tour-objects>
  <object model="tourname" tn="1">
    <field name="name" type="CharField">Tour Name 1</field>
    <field name="tour_image" type="FileField">http://url.com/images/picture.jpg</field>
  </object>
  <object model="tourname" tn="2">
    <field name="name" type="CharField">Tour Name 2</field>
  </object>
  <object model="tourname" tn="3">
    <field name="name" type="CharField">Tour Name 3</field>
  </object>
</tour-objects>

Проблема с разбором XML в ASP. Структура XML-кода выглядит как приведенная выше.

Set objXML = Server.CreateObject("Microsoft.XMLDOM")
objXML.Async = False
objXML.SetProperty "ServerHTTPRequest", True
objXML.ResolveExternals = True
objXML.ValidateOnParse = True
objXML.Load(Server.MapPath("data.xml"))

Set Objects = objXML.SelectNodes("//tour-objects/object[@model='tourname']")

For i = 0 To Objects.Length-1

    For Each objNode In Objects(i).childNodes

        Select Case Lcase(objNode.nodeName)
            Case "field"
            fld = objNode.getAttribute("name")
            Select Case fld
                Case "name"
                    txt_name = objNode.text
                Case "tour_image"
                    txt_tour_image = objNode.text
            End Select
        End Select

    Next    
    Response.Write("name: " & txt_name &"<br>")
    Response.Write("tour_image: " & txt_tour_image &"<br><br>")
Next

Tour_image не входит в каждый узел. Поэтому, когда я анализирую, я получаю следующую ошибку. Похоже, что раздел tour_image находится на 2-м и 3-м узлах.

name: Tour Name 1
tour_image: http://url.com/images/picture.jpg

name: Tour Name 2
tour_image: http://url.com/images/picture.jpg

name: Tour Name 3
tour_image: http://url.com/images/picture.jpg

Где я делаю ошибки? Я буду счастлив, если вы сможете мне помочь.

1 Ответ

0 голосов
/ 01 июля 2018

txt_name и txt_tour_image определяются один раз. Происходит то, что первый узел объекта устанавливает для txt_tour_image значение http://url.com/images/picture.jpg. Следующий объект не имеет поля с именем tour_image. Поскольку он не имеет такового, txt_tour_image не изменяется и будет оставаться неизменным до тех пор, пока не появится узел с tour_image.

Как только вы введете цикл for, вам нужно сбросить эти две переменные

For i = 0 To Objects.Length-1
      txt_name = ""
      txt_tour_image = ""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...