Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - ASP и VBScript

Страница: 1 |

 

  Вопрос: Обработка XML Добавлено: 09.11.11 17:47  

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

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #1 Добавлено: 10.11.11 05:18
Вместо
'ТУТ ДОЛЖЕН ИДТИ ВРОДЕ КАК ЦИКЛ FOR EACH.
'ТОЛЬКО НЕ ПОНИМАЮ С КАКИМИ ПАРАМЕТРАМИ.

должен быть примерно следующий код
  1. Dim oXML, rootNode, oNodes
  2. Set oXML = CreateObject("MSXML2.DOMDocument")
  3. oXML.Async = False
  4. Set oNodes = currNode.SelectNodes("pfr_xmls/pfr_xml")
  5. if (oNodes.Length > 0) Then
  6. Dim zzz : zzz = 0
  7.  
  8. For zzz = 0 to oNodes.Length - 1
  9. oXML.loadXML("") ' load for document, loadXML for text
  10. oXML.appendChild(oXML.createProcessingInstruction("xml", "version='1.0' encoding='Windows-1251'"))
  11. Set rootNode = oXML.appendChild(oXML.createElement("root"))
  12.  
  13. rootNode.appendChild(oNodes(zzz).cloneNode(true))
  14. oXML.save("C:\Scripts\XML\newXml" & (zzz + 1) & ".xml")
  15.  
  16. Next
  17. End If

В качестве дополнительной информации:
Информация по XML (англ)
http://www.w3schools.com/xml/default.asp
Информация по XMLDOM (англ)
http://www.w3schools.com/dom/default.asp

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам