Уважаемые. Вопрос.
Есть xml, которая выглядит вот так:
<?xml version="1.0" encoding="Windows-1251"?>
<root>
<id>3904</id>
<sos_login>848hRRB9Th</sos_login>
<pfr_xmls>
<pfr_xml code="014-001" no="014-001-052241">
<регистрационнаяИнформация>
<датаВремяФормирования>2011-11-09T13:05:05</датаВремяФормирования>
<списокСубъектов>
<субъект идентификаторСубъекта="014-001-052241" типСубъекта="АбонентСЭД" имя="Name of firm">
<списокСертификатов типПодписанта="руководитель">
<сертификат активный="true">
MIIEZjCCBB
</сертификат>
</списокСертификатов>
</субъект>
</списокСубъектов>
</регистрационнаяИнформация>
</pfr_xml>
<pfr_xml code="014-004" no="014-004-012910">
<регистрационнаяИнформация>
<датаВремяФормирования>2011-11-09T13:05:05</датаВремяФормирования>
<списокСубъектов>
<субъект идентификаторСубъекта="014-004-012910" типСубъекта="АбонентСЭД" имя="Name of Firm">
<списокСертификатов типПодписанта="руководитель">
<сертификат активный="true">
MIIEZjCCBB
</сертификат>
</списокСертификатов>
</субъект>
</списокСубъектов>
</регистрационнаяИнформация>
</pfr_xml>
</pfr_xmls>
</root>
Иногда в теге <pfr_xmls> может быть не две, как сейчас. а три сертификата. А то и один.
Надо весь текст от тега <РегистрационнаяИнформация> закинуть в отдельную XML и назвать его... Не важно как. А поскольку тут два сертификата, то надо создать две XML.
Соответственно, вытащив из нее имя компании и серийный номер.
У меня пока временно выглядит код вот так:
Dim DOMDocument1, Node1, tmpStr1
Set DOMDocument1 = CreateObject("MSXML2.DOMDocument")
With DOMDocument1
.Load "C:\XML\" & basenameNEW
if .parseError.reason <> "" Then
MsgBox .parseError.reason,vbCritical
WScript.Quit
End if
Set currNode = domdocument1.documentElement
login = currNode.childNodes(1).text 'Копирую значение Логина
WScript.Echo currNode.childNodes(1).text
'XML1 = currNode.childNodes(2).text
'WScript.Echo currNode.childNodes(2).text
End With
'ТУТ ДОЛЖЕН ИДТИ ВРОДЕ КАК ЦИКЛ FOR EACH.
'ТОЛЬКО НЕ ПОНИМАЮ С КАКИМИ ПАРАМЕТРАМИ.
'Ниже сейчас разбираю одну XML. Вернее придется разобрать один из сертификатов.Но в цикле.
'Option Explicit
Dim DOMDocument, Node, tmpStr
Set DOMDocument = CreateObject("MSXML2.DOMDocument")
'Далее надо загрузить XML с первым сертификатом.
With DOMDocument
.Load "C:\XML\" & basename 'Я так понимаю, это не надо.
if .parseError.reason <> "" Then
MsgBox .parseError.reason,vbCritical
WScript.Quit
End if
With .documentElement.SelectSingleNode("списокСубъектов")
tmpStr = ""
For Each Node in .SelectNodes("pfr_xmls")
'tmpStr = tmpStr & "Идентификатор субъекта: " & Node.GetAttribute("идентификаторСубъекта") & vbCrlf
'tmpStr1 = tmpStr & "Тип субъекта: " & Node.GetAttribute("идентификаторСубъекта") & vbCrlf
'tmpStr2 = tmpStr & "имя: " & Node.GetAttribute("имя") & vbCrlf
sNomer = Node.GetAttribute("идентификаторСубъекта")
firm = Node.GetAttribute("имя")
Next
firm = Replace(firm,"'","")
firm = Replace(firm,"""", "")
firm = Replace(firm,"»", "")
firm = Replace(firm,"«", "")
End With
End With
Грубо говоря, структура такая:
- Скачивание XML. (есть)
- Считываем поле login. (есть)
- Далее циклом проходим FOR EACH по всем <pfr_xmls> :
_______ Сохраняем и формируем новый XML-файл, который начинается только с тегов <РегистрационнаяИнформация> с примерно таким же id и дописываем через "_" цифру по счету. (Пример: id 4556. Значит наши новые XML будут 4556_1, 4556_2)
_______ Вытаскиваем данные - номер и имя компании.
_______ Далее идет отсылание на почту (есть).
Основная проблема, не знаю немного структуру работы с XMLDOM
Ответить
|