2017-02-10 5 views
0

У меня есть строка xml, которую я хотел бы преобразовать в объект XML в asp VBscript. Тогда я хотел бы получить доступ к элементу ребенка на основе атрибута ид родителя:Строка в XML и доступ к определенному значению по ID в ASP VBScript

… 
<subset> 
<subtitle>DEMAND</subtitle> 
<information id="dat1" timestamp="2017-01-26T10:00:00.000-05:00"> 
    <info_title>Market Demand</info_title> 
    <new_val>19887.4</new_val> 
    <old_val>19584.3</old_val> 
</information> 
<information id="dat2" timestamp="2017-01-26T10:45:00.000-05:00"> 
    <info_title>5-Minute Market Demand</info_title> 
    <new_val>19742.2</new_val> 
    <old_val>19712.7</old_val> 
</information> 
<information id="dat3" timestamp="2017-01-26T10:00:00.000-05:00"> 
    <info_title>Ontario Demand</info_title> 
    <new_val>17204.7</new_val> 
    <old_val>17076.4</old_val> 
</information> 
</subset> 
… 

Например, я хочу, чтобы получить информацию о идентификатор =»dat2” new_val значение.

function getXMLValue(strXMLfile, XMLelement, infoID, XMLattrib) 

    'Declare local variables 
    Dim objXML, return_value 
    return_value = null 

    'Instantiate the XMLDOM Object that will hold the XML file. 
    set objXML = Server.CreateObject("Microsoft.XMLDOM") 

    'Turn off asyncronous file loading. 
    objXML.async = false 

    objXML.LoadXml(strXMLFile) 
    objXML.setProperty "SelectionLanguage", "XPath" 

    if XMLelement = "date" then 
     set return_value = objXML.selectSingleNode("date/@" & XMLattrib) 

    elseif XMLelement = "id" then 
     set return_value = objXML.selectSingleNode("subset/information[@id='" & infoID & "']/" & XMLattrib) 

    elseif XMLelement = "page_title" then 
     set return_value = objXML.selectSingleNode("page_title") 

    elseif XMLelement = "date_stamp" then 
     set return_value = objXML.selectSingleNode("date" & XMLvalue) 

    elseif XMLelement = "timestamp" then 
     set return_value = objXML.selectSingleNode("subset/information/[@id='" & infoID & "']/timestamp/@" & XMLattrib) 

    end if 

    if not(isnull(return_value)) then 
     getXMLvalue = return_value.text 
    end if 

    set return_value = nothing 
    set objXML = nothing 
end function 

Этот фрагмент кода дает мне значение первого new_val, но как указать, чтобы получить значение информации ID =»dat2” ?

ответ

2

Вы можете выполнить запрос xpath с помощью selectSingleNode method.

Что-то вроде этого:

objXML.setProperty "SelectionLanguage", "XPath" 
set objNode = objXML.selectSingleNode("/subset/information[@id='dat2']/new_val") 
if not objNode is nothing then 
    MsgBox objNode.text 
end if 
+0

HI Кевин, что не похоже на работу. Я обновил свой код выше. Примечание: strXML-файл - это строка XML, указанная выше. – Vipresh

+0

Укажите код, где вызывается функция getXMLValue. Кроме того, здесь находится xml, начиная с всего файла strXML, или есть еще? –

+0

Вызывается exmaple getXMLValue: getXMLvalue (strXMLfile, «id», «dat2», «new_val»). В XML-файле strXML есть еще много ... Также, если я изменяю файл strXML, чтобы указать на локальный файл xml, он работает, но мне нравится передавать его как строку. – Vipresh