显然,我更倾向于打击那个决定吐出xml的人是个好主意,但唉,我不能。 ; - )
我有以下xml:
<search>
<key_0>
<ContentTitle>blah</ContentTitle>
</key_0>
<key_1>
<ContentTitle>blah blah</ContentTitle>
</key_1>
</search>
获取数据的正确xpath是什么。 如果,应该,节点名称每次都是“关键”,下面的asp,使用// search / key的xpath将完美地完成工作。但是,我无法确定正确的xpath /方式,或者如何修改代码。
任何想法?感谢
Dim mydoc : Set mydoc=Server.CreateObject("Microsoft.XMLDOM")
mydoc.async=false
mydoc.loadXML(xmlFile)
If mydoc.parseError.errorcode<>0 then
Response.write mydoc.parseError.errorcode & " is the error code!<br />"
Else
Set xmlPNode = mydoc.selectNodes("//search/key")
If(xmlPNode.Length=0) Then
response.write "No results found!"
Else
Dim iTotalResults : iTotalResults = (xmlPNode.Length - 1)
Dim i
For i = 0 to iTotalResults
strContentTitle=GetXMLItem("ContentTitle", i)
Next
End If
Set xmlPNode = Nothing
End if
Function GetXMLItem(strpItem, ipValue)
Dim nlOutput : Set nlOutput = xmlPNode(ipValue).selectNodes(strpItem)
If(nlOutput.Length<>0) Then
GetXMLItem=nlOutput(0).Text
Else
GetXMLItem=""
End If
End Function
答案 0 :(得分:1)
首先,您应将SelectionLanguage属性设置为XPath或使用特定版本的MSXML,该版本使用XPath作为其默认选择语言。
更多信息:SelectionLanguage Property
您应该使用的查询来获取名称以“key_”开头的节点:
search/*[starts-with(name(), 'key_')]
基于xml文档的测试脚本,请考虑。
Dim xmlFile
xmlFile = "<search><key_0><ContentTitle>blah</ContentTitle></key_0>" & _
"<key_1><ContentTitle>blah blah</ContentTitle></key_1></search>"
Dim mydoc
Set mydoc = Server.CreateObject("MSXML2.DomDocument.4.0") 'by default selection language is XPath
'mydoc.setProperty "SelectionLanguage", "XPath"
mydoc.async=false
mydoc.loadXML xmlFile
If mydoc.parseError.errorcode <> 0 Then
Response.Write mydoc.parseError.errorcode & " is the error code!<br />"
Else
Dim xmlPNode
Set xmlPNode = mydoc.selectNodes("search/*[starts-with(name(), 'key_')]/ContentTitle")
If xmlPNode.Length = 0 Then Response.Write "No results found!"
Dim nodeTitle
For Each nodeTitle In xmlPNode
Response.Write nodeTitle.parentNode.nodeName & " : "& nodeTitle.nodeTypedValue & "<br />"
Next
Set xmlPNode = Nothing
End If
Set mydoc = Nothing