none
VBS парсинг XML RRS feed

  • Вопрос

  • Доброго времени суток

    Помогите разобраться пожалуйста в таком вопросе

    Есть приложение которое должно читать CSV, к этому приложению можно прикрутить VBS

    CSV мне нужно получить из такого  XML

    <?xml version="1.0" encoding="utf-8"?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
    <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
    <ActiveSheet>0</ActiveSheet>
    </ExcelWorkbook>
    <Styles>
    <Style ss:ID="Default" ss:Name="Normal">
    <Alignment ss:Vertical="Bottom" />
    <Borders />
    <Font ss:FontName="Tahoma" ss:Size="9" ss:Color="#000000" />
    <Interior />
    </Style>
    <Style ss:ID="KLHeader">
    <Font ss:Size="24" ss:Color="#FFFFFF" ss:Bold="1" />
    <Interior ss:Color="#084D39" ss:Pattern="Solid" />
    </Style>
    <Style ss:ID="ReportHeader">
    <Font ss:Size="16" ss:Color="#000000" ss:Bold="1" />
    <Interior ss:Color="#F4FFFA" ss:Pattern="Solid" />
    </Style>
    <Style ss:ID="ReportDescr">
    <Font ss:Size="10" ss:Color="#000000" ss:Bold="0" />
    <Interior ss:Color="#F4FFFA" ss:Pattern="Solid" />
    </Style>
    <Style ss:ID="ReportPeriod">
    <Font ss:Size="11" ss:Color="#004532" ss:Bold="1" />
    <Interior ss:Color="#F4FFFA" ss:Pattern="Solid" />
    </Style>
    <Style ss:ID="TableSuperHeader">
    <Font ss:Color="#FFFFFF" ss:Bold="1" ss:Size="16" />
    <Interior ss:Color="#084D39" ss:Pattern="Solid" />
    </Style>
    <Style ss:ID="TableHeader">
    <Font ss:Color="#FFFFFF" ss:Bold="1" ss:Size="10" />
    <Interior ss:Color="#084D39" ss:Pattern="Solid" />
    </Style>
    <Style ss:ID="TableData">
    <Interior ss:Color="#F4FFFA" ss:Pattern="Solid" />
    </Style>
    </Styles>
    <Worksheet ss:Name="Summary">
    <Table>
    <Row ss:StyleID="KLHeader">
    <Cell>
    <Data ss:Type="String">Kaspersky Security Center</Data>
    </Cell>
    </Row>
    <Row ss:StyleID="ReportHeader">
    <Cell>
    <Data ss:Type="String">Отчет о вирусах</Data>
    </Cell>
    </Row>
    <Row ss:StyleID="ReportDescr">
    <Cell>
    <Data ss:Type="String">Отчет содержит о вирусной активности </Data>
    </Cell>
    </Row>
    <Row ss:StyleID="ReportPeriod">
    <Cell>
    <Data ss:Type="String">Период: DATE XX-XX-XX  по DATE YY-YY-YY  </Data>
    </Cell>
    </Row>
    <Row>
    <Cell>
    </Cell>
    </Row>
    <Row>
    <Cell>
    </Cell>
    </Row>
    <Row>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Обнаруженный объект</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Тип объекта</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Количество обнаружений</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Различных файлов</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Опасных компьютеров</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Опасных групп</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Первое обнаружение</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Последнее обнаружение</Data>
    </Cell>
    </Row>
    <Row>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">Backdoor.PHP.Agent.vd</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">троянская программа</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">1</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">1</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">1</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">1</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String"> DATE XX-XX-XX </Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String"> DATE XX-XX-XX </Data>
    </Cell>
    </Row>
    <Row>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">Backdoor.Win32.Shiz.flud</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">троянская программа</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">4</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">2</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">1</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">1</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String"> DATE XX-XX-XX </Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String"> DATE XX-XX-XX </Data>
    </Cell>
    </Row>
    <Row>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">Trojan-Clicker.Win32.Delf.hyy</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">троянская программа</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">3</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">3</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">1</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">1</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String"> DATE XX-XX-XX </Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String"> DATE XX-XX-XX </Data>
    </Cell>
    </Row>
    </Table>
    </Worksheet>
    <Worksheet ss:Name="Details">
    <Table>
    <Row>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Виртуальный Сервер</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Группа</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Клиентский компьютер</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Обнаруженный объект</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Время обнаружения</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Путь к файлу</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Тип объекта</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Действие</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Учетная запись</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Программа</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Номер версии</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Видим в сети</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Последнее соединение с Сервером администрирования</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">IP-адрес</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">NetBIOS-имя</Data>
    </Cell>
    <Cell ss:StyleID="TableHeader">
    <Data ss:Type="String">Домен</Data>
    </Cell>
    </Row>
    <Row>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">
    </Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">GROUP NAME</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">User_Ivan</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">Backdoor.Win32.Shiz.flud</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String"> DATE XX-XX-XX </Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">D:\ pornoarhiv.rar/ BUILD 3636 X64-Crk.exe</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">троянская программа</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">file D:\ pornoarhiv.rar/ BUILD 3636 X64-Crk.exe is still infected: write not supported.</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">N/A</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">Kaspersky Anti-Virus 6.0 for Windows Workstations</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">6.0.4.1424</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String"> DATA XX-XX-XX </Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String"> DATA XX-XX-XX </Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">192.168.2.12</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">User_Ivan</Data>
    </Cell>
    <Cell ss:StyleID="TableData">
    <Data ss:Type="String">Domain</Data>
    </Cell>
    </Row>
    </Table>
    </Worksheet>
    </Workbook>


    Из этого всего разнообразия тегов мне нужно получить только

    "DATA XX-XX-XX";"D:\ pornoarhiv.rar/ BUILD 3636 X64-Crk.exe";"192.168.2.12";"User_ivan";

    Таких событий в XML может быть одно а может быть 10

    Нагуглил я такую статейку но скрипта в упор не отрабатывает


    24 июля 2014 г. 12:04
    Модератор

Ответы

  • Проверил в PowerShell v4 и v2 - отработало. Проблем с кодировкой нет.

    И в cmd:

    • Помечено в качестве ответа Vector BCOModerator 25 июля 2014 г. 9:37
    25 июля 2014 г. 7:25
    Отвечающий
  • Можно посмотреть вывод команды Get-Content и если есть проблемы,то:

    1) Попробовать различные кодировки параметра -Encoding

    Unknown
    String
    Unicode
    Byte
    BigEndianUnicode
    UTF8
    UTF7
    UTF32
    Ascii
    Default
    Oem

    2) Либо сохранить xml в UTF-8

    • Помечено в качестве ответа Vector BCOModerator 25 июля 2014 г. 9:37
    25 июля 2014 г. 9:05
    Отвечающий

Все ответы

  • Const ForReading = 1
    Const ForWriting = 2
    Const Path = "c:\temp\Отчет о вирусах.xml"
    Dim Outfile
    
    Outfile = "c:\temp\Отчет.xml"
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(Path, ForReading)
    
    strText = objFile.ReadAll
    objFile.Close
    strNewText = Replace(strText, "><", ">"& vbNewLine &"<")
    
    Set objFile = objFSO.OpenTextFile(Path, ForWriting)
    objFile.WriteLine strNewText
    objFile.Close
    
    Set objFile = objFSO.OpenTextFile(Path, ForReading)
    strText = objFile.ReadAll
    objFile.Close
    
    txtext = strText
    
    
    function formextract(text)
       dim txtext, pos, pos2, pos1
          do while instr(text, "<Data ss:Type=") > 0
             pos = instr(instr(text, "<Data ss:Type="), text, ">") + 1
             pos2 = instr(pos, text, "</Data>")
             txtext = txtext & mid(text, pos, pos2 - pos) & vbcrlf
             text = mid(text, pos2)
    		 loop
          formextract = left(txtext, len(txtext) - 2)
    end function 
    
    formextract strText
    
    WScript.Echo strText
    
    Set objFile = objFSO.OpenTextFile(Path, ForReading)
    strText = objFile.ReadAll
    objFile.Close

    я уперся на уровне функции, так как не могу понять как она должна отработать, начало необходимо так как каспер текст выплёвывает слитно и между тегами нет даже пробелов
    24 июля 2014 г. 12:15
    Модератор
  • Т.к. не знаком с vbscript,то по парсингу не подскажу. Но можно вызвать PowerShell из vbscript и создать csv:

    PS > ([xml](Get-Content 1.xml)).Workbook.Worksheet[1].Table.Row[1].Cell.InnerText
    
    GROUP NAME
    User_Ivan
    Backdoor.Win32.Shiz.flud
     DATE XX-XX-XX
    D:\ pornoarhiv.rar/ BUILD 3636 X64-Crk.exe
    троянская программа
    file D:\ pornoarhiv.rar/ BUILD 3636 X64-Crk.exe is still infected: write not supported.
    N/A
    Kaspersky Anti-Virus 6.0 for Windows Workstations
    6.0.4.1424
     DATA XX-XX-XX
     DATA XX-XX-XX
    192.168.2.12
    User_Ivan
    Domain

    В Vbscript для работы с XML,можно воспользоваться Microsoft.XMLDOM - Query XML Files Using VBScript

    24 июля 2014 г. 19:03
    Отвечающий
  • Уважаемый Kazun, не выдает ровным счётом ничего

    по Worksheet 0 выдает инфу, только Rоw нужно менять что бы получить инфу а вот с Worksheet 1 как не мудохайся а результата 0

    Пробовал сохранить то что написал сверху в файл (вдруг что то не дописал) но результат тот же

    И есть вопрос по кодировке, русские буквы выдает кракозябрами

    chcp 65001 пробовал но при этом кроме русского перестает читаться и английский

    25 июля 2014 г. 7:09
    Модератор
  • Проверил в PowerShell v4 и v2 - отработало. Проблем с кодировкой нет.

    И в cmd:

    • Помечено в качестве ответа Vector BCOModerator 25 июля 2014 г. 9:37
    25 июля 2014 г. 7:25
    Отвечающий
  • Wednesday 6 P.M. Scan
    User123
    Trojan-Clicker.Win32.Delf.hyy
    23 Р>РёРїР?С? 2014 С?. 19:37:15
    D:\ doc\ delphi\ flenov_bibliya_delphi_source.rar/ / flenov_bibliya_delphi.mdf/ / Р?С?РёР?РчС?С<\ Р"Р>Р°Р?Р° 5\ Hello W
    orld\ HelloWorld.exe;1
    С'С?Р?С?Р?С?РєР°С? РїС?Р?Р?С?Р°Р?Р?Р°
    Р РчР·С?Р>С?С'Р°С':     Р?Рч Р?С<Р>РчС╪РчР?Р?: Trojan-Clicker.Win32.Delf.hyy
    Р?Р+С?РчРєС':   D:\ doc\ delphi\ flenov_bibliya_delphi_source.rar/ flenov_bibliya_delphi.mdf/ Р?С?РёР?РчС?С<\ Р"Р>Р°Р?Р°

    5\ Hello World\ HelloWorld.exe;1

    N/A
    Kaspersky Endpoint Security 10 Р?Р>С? Windows
    10.2.1.23
    25 Р>РёРїР?С? 2014 С?. 9:45:29
    25 Р>РёРїР?С? 2014 С?. 9:45:29
    192.168.2.123
    User123
    Domain

    Но в остальном все супер

    25 июля 2014 г. 8:51
    Модератор
  • Можно посмотреть вывод команды Get-Content и если есть проблемы,то:

    1) Попробовать различные кодировки параметра -Encoding

    Unknown
    String
    Unicode
    Byte
    BigEndianUnicode
    UTF8
    UTF7
    UTF32
    Ascii
    Default
    Oem

    2) Либо сохранить xml в UTF-8

    • Помечено в качестве ответа Vector BCOModerator 25 июля 2014 г. 9:37
    25 июля 2014 г. 9:05
    Отвечающий
  • Удален. (был офтопиковый коммент)
    • Изменено Svolotch 29 июля 2014 г. 8:48
    29 июля 2014 г. 7:40