PDA

Показать полную графическую версию : [решено] Очередной вопрос по парсингу XML


apozlevich
20-03-2013, 11:15
Извиняюсь за повтор темы, но я так и не сумел разобраться.
Есть .xml-файл, возьмем для примера первый попавшийся PAD-файл (http://www.nirsoft.net/pad/acm.xml). Надо вытащить оттуда несколько значений, для примера XML_DIZ_INFO\Program_Name.

Вообще, хочется на BAT, так как это часть простенького скрипта, но никак не могу найти простой парсер для этого. Цель — что-нибудь, куда на вход поступает "адрес" элемента, а на выход его значение, не знаю, как это правильно у XML называется.

Dragokas
26-03-2013, 04:32
apozlevich, попробуйте комбинированный сценарий:

main.cmd
@echo off
SetLocal
Set $Query=http://www.nirsoft.net/pad/acm.xml
Set $Node=XML_DIZ_INFO/Program_Info/Program_Name

for /f "delims=" %%A in ('cscript.exe //nologo "xml_parse.vbs" "%$Query%" "%$Node%"') do set "$RetValue=%%A"

echo.%$RetValue%
pause

XML_parse.vbs
Option Explicit
'On Error Resume Next
dim sQuery, sRetValue, objRemXML

Sub XMLRequest(sQuery, objRemXML)
Set objRemXML = CreateObject("Microsoft.XMLDOM")
objRemXML.async = False
objRemXML.Load (sQuery)
End Sub

Sub XMLParse(objRemXML, sNode, sRet)
Dim objXMLret
Set objXMLret = objRemXML.SelectSingleNode(sNode)
If Err.Number <> 0 Then
'MsgBox "Error of IPRange"
Else
If Not objXMLret Is Nothing Then sRet = objXMLret.Text
End If
End Sub

sQuery = WScript.Arguments(0)

'Initialize
Call XMLRequest(sQuery, objRemXML)

Call XMLParse(objRemXML, WScript.Arguments(1), sRetValue)

Wscript.Echo sRetValue

Set objRemXML = Nothing

Vadikan
26-03-2013, 09:36
Вообще, хочется на BAT »
А в PowerShell это элементарно делается http://www.outsidethebox.ms/14817/#Get-Content

apozlevich
26-03-2013, 11:00
Diskretor, спасибо, о чем-то таком я и мечтал.

Vadikan, да, PowerShell та еще вещЪ. Займусь изучением тогда, когда перестану глупые вопросы задавать :)




© OSzone.net 2001-2012