Уважаемые. Вопрос.
 
Есть 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
Ответить
        |