Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Обработка XML (http://forum.oszone.net/showthread.php?t=220060)

KaKTuZ49 09-11-2011 17:57 1791700

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


Время: 04:02.

Время: 04:02.
© OSzone.net 2001-