XPath Classic ASP

时间:2012-03-21 00:01:15

标签: xml xpath asp-classic vbscript

显然,我更倾向于打击那个决定吐出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

1 个答案:

答案 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