我有一些遗留xml,用于为网站的某个区域创建导航:
<?xml version="1.0" encoding="utf-8"?>
<Menu>
<menuItem>
<Name>About</Name>
<ID>1</ID>
<Link>/about/index.html</Link>
<menuItem>
<Name>Vision</Name>
<ID>1.1</ID>
<Link>/about/Vision.html</Link>
</menuItem>
<menuItem>
<Name>History</Name>
<ID>1.2</ID>
<Link>/about/history.html</Link>
<menuItem>
<Name>Relocation</Name>
<ID>1.2.1</ID>
<Link>/about/relocation.html</Link>
</menuItem>
</menuItem>
</menuItem>
</Menu>
网站本身是用经典ASP构建的,所以我尝试使用XPath来渲染导航:
Dim objXML, strLeftNav
Set objXML = Server.CreateObject("MSXML2.DomDocument.4.0")
objXML.async=false
objXML.load("nav.xml")
If objXML.parseError.errorcode = 0 Then
Dim xmlNode
For Each xmlNode In objXML.selectNodes("*/menuItem/*")
Set xmlNameNode = xmlNode.selectSingleNode("//Menu/menuItem/Name")
strLeftNav = strLeftNav & "<li>" & xmlNameNode.nodeTypedValue & "</li>"
Next
Set xmlNameNode = Nothing
End If
Set objXML = Nothing
Response.Write("<ul>" & strLeftNav & "</ul>")
这给我留下了一些李只是显示第一个名称节点是&#39;关于&#39;我试图将每个menuItem节点的Name节点拉出到列表中,有人可以建议我使用正确的XPath语法吗?
答案 0 :(得分:0)
XPath表达式//Menu/menuItem/Name
从树的根开始进行绝对选择。您想要选择相对于当前位置的位置,可能是Name
。但是你还没有说清楚如何处理输入XML的递归结构,不清楚你真正想要的是什么输出。
答案 1 :(得分:0)
这似乎对我有用,可能有助于其他人:
Set xmlNodes = xmlobj.selectNodes("//menuItem/menuItem")
If xmlNodes.Length = 0 Then Response.Write "No results found!"
Dim xmlItem
For Each xmlItem In xmlNodes
Set xmlNameNode = xmlItem.selectSingleNode(".//Name")
Set xmlIDNode = xmlItem.selectSingleNode(".//ID")
Set xmlLinkNode = xmlItem.selectSingleNode(".//Link")
[use code such as xmlLinkNode.nodeTypedValue to create <ul>]
Next
Set xmlNodes = Nothing