У меня неприятная задача работать на классическом ASP-сайте (VBSCRIPT), и мне нужно проанализировать следующую информацию в цикле.
<xml>
<product ref="xxx">
<xxx/>
<xxx/>
<xxx/>
<images>
<image ref="JCCCCCC" />
<image ref="JCCCCCD" />
</images>
</product>
<product ref="xxx">
<xxx/>
<xxx/>
<xxx/>
<images>
<image ref="JCCCCCC" />
<image ref="JCCCCCD" />
</images>
</product>
</xml>
Я пытаюсь получить ссылки на продукт, а затем изображения (4-й основной узел вниз)
Я уже давно недоволен этим и страдаю от блокады мозга после того, как не использую ASP более 2 лет.
<%
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
Set objLst = Server.CreateObject("Microsoft.XMLDOM")
Set objHdl = Server.CreateObject("Microsoft.XMLDOM")
objXML.async = False
objXML.Load (Server.MapPath("\") & "\xmlupdate\product.xml")
If objXML.parseError.errorCode <> 0 Then
'handle the error
End If
Set objLst = objXML.getElementsByTagName("Product")
SizeofObject = objLst.length-1
response.Write(SizeofObject&"<br><br>")
For i = 0 To (SizeofObject-1)
Set objHnd = objLst.item(i)
Response.Write(objHdl.childNodes(0).text)
Next
%>
Любая помощь будет хороша, прежде чем я сойду с ума по ASP
--- Дополнительно ---
Использование этого обеспечивает полный вывод, так как я надеюсь, что это атрибуты узла, которые я не могу получить.
<%
Set objLst = objXML.getElementsByTagName("Product")
SizeofObject = objLst.length-1
response.Write(SizeofObject&"<br><br>")
For each elem in objLst
set childNodes = elem.childNodes
for each node in childNodes
Response.Write node.nodeName & " = " & node.text & "<br />" & vbCrLf
next
Response.Write "<hr>" & vbCrLf
Next
%>
Окончательный код для сброса XML (Cerebrus Below)
<%
Set objLst = objXML.getElementsByTagName("Product")
SizeofObject = objLst.length-1
response.Write(SizeofObject&"<br><br>")
For each elem in objLst
set childNodes = elem.childNodes
for each node in childNodes
Response.Write node.nodeName & " = " & node.text & "<br />" & vbCrLf
If lcase(node.nodeName)="images" then
Response.Write("<B>Images Hit</B></br>")
set xattchildnodes = node.childNodes
For Each attchildnodes in xattchildnodes
For Each att in attchildnodes.Attributes
Response.Write att.Name & " = " & att.text & "<br />" & vbCrLf
Next
Next
End If
next
Response.Write "<hr>" & vbCrLf
Next
%>
Рабочая версия XPATH (модифицированная из Pete Duncanson ниже)
<%
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
objXML.Load (Server.MapPath("\") & "\Product.xml")
'etc'
Dim nodes
set nodes = objXML.selectNodes("//xml/Product")
Dim images
For each node in nodes
Response.Write("<ul>")
Response.Write("<li>Ref: " & node.getAttribute("ref") & "</li>")
Set images = node.selectNodes("Images/Image")
For each image in images
Response.Write( "<li>Image:"& image.getAttribute("ref") &"</li>" )
Next
Response.Write( "</ul>" )
Next
%>
Энтони Джонс отмечает, что лучше быть конкретным, поэтому вы можете изменить
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
до
Set objXML = Server.CreateObject("MSXML2.DOMDocument.3.0")
Который все еще работает с окончательным кодом.