Тема: VBScript: работа с XML с помощью компонента Chilkat XML
Бесплатный COM-сервер Chilkat XML предоставляет простой и удобный функционал для работы с XML. Дистрибутив (msi-инсталлятор) имеет размер порядка 1,1 Мб. Документацию можно найти здесь. Примеры можно найти здесь.
См. также MS XML Parser.
Основные возможности Chilkat XML:
* доступ к XML с помощью объектной модели документов (DOM), многочисленные методы обхода документа; поиск и сортировка узлов; добавление атрибутов и их значений к узлам;
* zip-сжатие узлов и поддеревьев в памяти;
* AES-шифрование содержимого узла;
* обработка двоичных данных (таких, как изображения) в пределах файлов XML.
Образцовый XML-файл для примера:
<CURRENCIES>
<LAST_UPDATE>2007-06-11</LAST_UPDATE>
<CURRENCY>
<NAME>Dollar</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>USD</CURRENCYCODE>
<COUNTRY>USA</COUNTRY>
<RATE>4.187</RATE>
<CHANGE>-0.238</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Pound</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>GBP</CURRENCYCODE>
<COUNTRY>Great Britain</COUNTRY>
<RATE>8.2356</RATE>
<CHANGE>-0.426</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Yen</NAME>
<UNIT>100</UNIT>
<CURRENCYCODE>JPY</CURRENCYCODE>
<COUNTRY>Japan</COUNTRY>
<RATE>3.4401</RATE>
<CHANGE>-0.784</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Euro</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>EUR</CURRENCYCODE>
<COUNTRY>EMU</COUNTRY>
<RATE>5.5892</RATE>
<CHANGE>-0.599</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Dollar</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>AUD</CURRENCYCODE>
<COUNTRY>Australia</COUNTRY>
<RATE>3.5288</RATE>
<CHANGE>-0.096</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Dollar</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>CAD</CURRENCYCODE>
<COUNTRY>Canada</COUNTRY>
<RATE>3.9405</RATE>
<CHANGE>-0.139</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>krone</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>DKK</CURRENCYCODE>
<COUNTRY>Denmark</COUNTRY>
<RATE>0.7508</RATE>
<CHANGE>-0.583</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Krone</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>NOK</CURRENCYCODE>
<COUNTRY>Norway</COUNTRY>
<RATE>0.6883</RATE>
<CHANGE>-1.078</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Rand</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>ZAR</CURRENCYCODE>
<COUNTRY>South Africa</COUNTRY>
<RATE>0.5764</RATE>
<CHANGE>0.017</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Krona</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>SEK</CURRENCYCODE>
<COUNTRY>Sweden</COUNTRY>
<RATE>0.5988</RATE>
<CHANGE>-0.499</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Franc</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>CHF</CURRENCYCODE>
<COUNTRY>Switzerland</COUNTRY>
<RATE>3.3807</RATE>
<CHANGE>-1.068</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Dinar</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>JOD</CURRENCYCODE>
<COUNTRY>Jordan</COUNTRY>
<RATE>5.9088</RATE>
<CHANGE>-0.253</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Pound</NAME>
<UNIT>10</UNIT>
<CURRENCYCODE>LBP</CURRENCYCODE>
<COUNTRY>Lebanon</COUNTRY>
<RATE>0.0278</RATE>
<CHANGE>0</CHANGE>
</CURRENCY>
<CURRENCY>
<NAME>Pound</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>EGP</CURRENCYCODE>
<COUNTRY>Egypt</COUNTRY>
<RATE>0.7357</RATE>
<CHANGE>-0.258</CHANGE>
</CURRENCY>
</CURRENCIES>
Форматирование XML с отступами:
Set oXml = CreateObject("Chilkat.Xml")
oXml.LoadXml "<root><company><name>Chilkat Software, Inc.</name><url>http://www.chilkatsoft.com/</url><phone>630-784-9670</phone></company></root>"
WScript.Echo oXml.GetXml()
Поиск и чтение нужных узлов:
Set oXml_ = CreateObject("Chilkat.Xml")
'oXml_.LoadXmlFile("c:\temp\test.xml")
Set oXml = oXml_.HttpGet("http://www.chilkatsoft.com/testData/currency.xml")
For i = 0 To oXml.NumChildrenHavingTag("CURRENCY") - 1 ' количество узлов "CURRENCY"
Set curr = oXml.GetNthChildWithTag("CURRENCY", i) ' получить n-ный узел "CURRENCY"
WScript.Echo "----"
WScript.Echo "Name: " & curr.GetChildContent("NAME") ' содержимое дочернего узла
WScript.Echo "Code: " & curr.GetChildContent("CURRENCYCODE")
WScript.Echo "Country: " & curr.GetChildContent("COUNTRY")
Next
Создание узлов и атрибутов:
Set oXml = CreateObject("Chilkat.Xml")
oXml.Tag = "root"
Set xNode0 = oXml.NewChild("products", "")
Set xChild = xNode0.NewChild("one", "content of node")
xChild.AddAttribute "price", "0.99"
Set xChild = xNode0.NewChild("two", "")
xChild.AddAttribute "price", "10.99"
WSCript.Echo oXml.GetXml()
Ещё один способ обхода документа:
Set oXml = CreateObject("Chilkat.Xml")
oXml.LoadXmlFile "C:\Temp\test.xml"
Set oNode = oXml.FirstChild()
Do While Not (oNode Is Nothing )
WScript.Echo oNode.GetChildContent("NAME")
Set oNode = oNode.NextSibling()
Loop
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.