none
Распарсить xml файл lotus notes RRS feed

  • Вопрос

  • Привет! Есть xml файл получаемый с помощью DXLExporter следующего вида

    <?xml version='1.0'?>
    <!DOCTYPE document SYSTEM 'xmlschemas/domino_8_5_1.dtd'>
    <document xmlns='http://www.lotus.com/dxl' version='8.5' maintenanceversion='1.0' replicaid='C555776D00343C18' form='Memo'>
    <noteinfo noteid='ab1f46' unid='6594A569B43FFF55442579E40041E03A' sequence='4'>
    <created><datetime>20120418T155931,94+04</datetime></created>
    <modified><datetime>20120418T163106,55+04</datetime></modified>
    <revised><datetime>20120418T163105,58+04</datetime></revised>
    <lastaccessed><datetime>20120418T163106,55+04</datetime></lastaccessed>
    <addedtofile><datetime>20120418T160012,53+04</datetime></addedtofile></noteinfo>
    <item name='$AutoSpell'><text>1</text></item>
    <item name='OriginalModTime'><datetime>20120418T160010,14+04</datetime></item>
    <item name='Logo'><text>StdNotesLtr2</text></item>
    <item name='dLogo'><text>StdNotesLtr2</text></item>
    <item name='useApplet'><text>True</text></item>
    <item name='DefaultMailSaveOptions'><text>1</text></item>
    <item name='ExpandPersonalGroups'><text>1</text></item>
    <item name='tmpImp'><text/></item>
    <item name='Sign'><text/></item>
    <item name='Body' sign='true' seal='true'><richtext><pardef id='1'/><par def='1'><picture width='158px' height='44px'><gif>
    R0lGODlhngAsAOcAADBYkChQiDBQiP///xgoSDBYiOjw8FBwoCBAYFiQUODo8HiQsDBQkPDw+NDY
    6CBAaFBwmJioyHiQuEBgmICAgPDw8HCIsCB44Njg6CBQyEBomHCQsJiowCA4YChIgLjI2CBAkCBg
    0CiI6FhoiLjA2Ojo8AgQIChAaHiIoNDY4Ojo6AgokBg4kCBAcBgoUChIeChQgEBYeBAgMBAokBA4
    oBgwSCg4UDhQcEBgkEhomGCQUHh4eIiQoIiYoCBYyCBw2DBAYDBQgDhgkEBgOFh4oFiQSICYuIig
    wJCowKCouKi40LC4yLjwcNjo0BBAsBgoOBgwYBhQuBhYuCBQwCBo0CBw0ChAcDBIaDBQaDBYMDhI
    YDiIGECQIEhYcEiYMFBomFiYUFjAKGCY+GiIsGiwgGjYOHCg+HjQMICo+JCYsJCw+LDIuMDIuNjY
    6Ojw4PDwKPjwKAAIEAgQGBAYKBgwUBgwWCAoOCA4UCgwQCg4WChAWChIaChIcDBIYDBQKDBQWDBw
    +DDwMHC4WIDwSJjgWMj4kOCwKPDwuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAngAsAEAI/wABAPDQ
    YoDBFh4EKlzIMEGCIg7fvIHj0GERhgxnTMlgkGOGjx8HZJiyAqPAEUpIoPmgxswGMmsaDEiiIwEe
    kzhz6mRYQIDPn0ADCB1KtKjRADuTKl3KAASLGTNYgGCglMgCFCiIjBjRZUgWP0OwLB07tifQs0fT
    EiXLtq3bt3CXLjBwQOEBAwt8OuCwwaBBBwE4OPhiwEIAJH4NI4VLYACBx4/rPBCw9MFjxwQexAVQ
    4AEPzZtD4yxg9uxPtYvfNibwIohAAVa03NDTAUZSEwNkINjNm7djnY0p+P0N4EiSDqKT8zQdtCgD
    qsqjS1d+VwKAAw0iAJBAt/oHBwC+2//Fex1vBAUTzJJwIGC9TwgGAAiA4aF+fRiUk9ZMcIjJIP5M
    N8mxLPrERhDglY54VDW3EA45cbEM4+LiOMhFsYkkuhmRBlABNqAAAUtBmXDKpLg0KeVlXVMdLNMS
    slkGaUhJ6MJjarBKhehyADbAijSxEkyFfA1mYiMbFD1Zs6IUc2RDGk4amimQWRrEDjFIZzpvcIJq
    ljNlTSvOcV7JwlKCyTEj0MJjbLD6AyIlIQ9W2EkcdiCHK1zhBCfYmjsBwLSYPS1q26znAt0SJoYE
    AT9LydrWuKY0KEkpZlYqn3IiMIC0KbKkC3lXvi4HAJLajTQqHQAHBICDa+lLKIj5ElsqChfcrIxl
    MdNJZ8LW0TehDQAawIB1JIABtyGVcgDAYwQ+wKeOEUpzCpjpBgywr8DJcjMd+MAcgFpUl7GJnNQ5
    6lNXapcS1EVGEXCA5/q0Rxsd4KobMF3gdLrJcsHJrkhVqkCSOqO5jIGSA7CbQL7jExxwTgBbDeXp
    UtfXcsFrAArQgAT8op3qTA6zE7BTeYxw2XipVAE4qKlBUMfXyrr2W9sLCAA7
    </gif></picture></par>
    <par def='1'/>
    <par def='1'>привет</par>
    <par def='1'/>
    <par def='1'><picture width='974px' height='166px'><gif>
    R0lGODlhzgOmAOcAAPDw8NjY2EBomEBgmDhgkODg6DBYkP///zhgmChQiMjIyICYuEhomFBwoKCw
    yAAAAIigwBAgOKi40Fh4oHCIsKCgoGBgYHBwcJioyOjo6NDQ0GhoaHiQuODg4GCAqMjQ0Ojw8MDI
    2Njg6JCgwJCowLDA0AgQGJiwyEBgkHiQsFh4qGiIsGB4qGiAqLjI2EhooAAIEIiYuHCQsChQkDBQ
    WZzGeZzImZzKuZzM2ZzO+ZzQGZ3SOZ3UWZ3WeZ3YmZ3auZ3c2Z3e+Z0g0Rqc//EmhSAQqfEA5UkF
    r/AmsnAAbjAJcdKehbGeDyCf7/kmgEAZ8PkA+SkQ3iAJBQEaT9AY44me5kkaoREZ7tCf3gAn/Qme
    EBqhEjqhKOEGkOAHFJqhTOEeHNqhHvqhIBqiIjqiJFqiJnqiKJqiKrqiLNqiLvqiMBqjMjqjNLob
    CgAnCpCjCmAqAHABcKCjQBqkQjqkRFqkRnqkSJqkSrqkTNqkTvqkUBqlUjqlVFqlVnqlWJqlWrql
    XNqlXvqlYBqmOYqjOsqjPqqjarIGgcAmc9CmbvqmcHqkZJqjZvqjQ8onfiIQL7Kkc7qjQXIqdiqk
    qIAoh4IKOgopCqAHjWAGOv+qDvuZCon6JjBQC44KJ1CwqApADWzAqGLKp28CpHWao4iqqJyqAI5a
    AKiaqqiqAX/aoxqgAaoaq7I6q7Raq7Z6q7iaq7q6q7zaq776q8AarMI6rMRarMZ6rMiarMq6rMza
    rM76rNAarbfKqiACq9K6qq2KH9Z6rdSaI9t6reC6rN0qKN9aq/Z3ruiarupqf/qXf/z3rhIQr/I6
    rxLgBE5AkvhKkgCYdX2jQFozeb6jRUkXQazHeku3dDokPJnjAbKUNyYQVfq3rhKbru1asSVArxjr
    f/mKr/uaNDG0QEOXepT3PgI7sAWbsCirQwvLsLOUAA9rsTBbAvZXf/NHsTH/WwL8h7H0urH6yngB
    CEMydDVEZwRGcENHN7BIa7IFy3oYQATPswc8kH8Tm67yh3/sCrM6m7USwLOKtzRAY3o0hHrLxwFB
    6XYlm7RJt7RqazYM4AIyu670F7foarE5q7U7y7U+a0BPM0IzFLIiS7ZHm7RmAwZgkLIou7IrywNQ
    4LAQe7PtGrc0u650CwR2u7V467WNM0NER3lnO7iFa7gqi7gM+2Av67imi7Xwarc86wAdSzuZq0C8
    Q7RFO7Jnq7QGKwWg63yZ07AKeEauCZvAC5tJe0fycAB/cLx4dA5/hLYUoJM9YAdJizYrAAJN8ALW
    e73Ym73Y2wLUa71NAAIt/6C94qu9GFW92guQMzVEXRAErIe05DAP87AOxNACSUcM69AP/cAOYDCw
    TTCSzEsBHsABNzm+49sCA/wCEAAA4UvA2Yu+Dpy+n9UFIbAChEuw2YANwUAB3MAOGUwBX8ABV1AM
    FBAP2TCwKikDKpl0lhM8I9jCt6QCNeCJDbACN0lHNGxCNUxHEmADYejCPvzD8FR9mjkCKvx22BNA
    2rM9D5BXejWwZ+C/MTCSC3ADNdADFEA8ElADAPBRTfVWt/jAfKiPMfUCR1DGQDyCKHAGZGM5bCwD
    Bh79Az7/SXrSlK60pS+N6UxretOc7rSnNd1kKIv6V1Kmsqnty+VUq3rVWv7tlxciTBmkQMyb9AAL
    PjPnXA+g0IV28Jo9VBIOzNqXrBHmoo+NUV1XtpKfkbWH66CCk/Aay3xGtlsZomrqCDNQUeCnrf2Z
    5RdPm8GHRnSNf23taQZ72BztgQQccIJ4y/vR9K63ve+N73zre9/87re//w3we0ugAE4etaiXeuqE
    HysCDG+4wx8O8YhLfOIUr7jFL47xjGt84xy3uA/4kACuJECu0Sq5yU+O8pQrYeUsV4IPXg7zmMs8
    CjSveRQ6jvMs6HznPMd5xJXAB2TFlQhEJ/oYjo70pCs9X+VMj1bLnw71qEfd51Sv+sd9RXKUJ2Hr
    XO+612UOdqmLfexQr7rZO3517I2cCCn3utu3Dva4x9zmdD+73e8ucaALnQ9I1/rb5Q54mNN98IPH
    u+F9HgWQG9zgCFd4wgMCADs=
    </gif></picture></par>
    <par def='1'/>
    <pardef id='2' leftmargin='1in'><code event='hidewhen'><formula>REM {DNT};
    useApplet="False" | form = "Return Receipt"</formula></code></pardef>
    <par def='2'/>
    <par def='2'/>
    <pardef id='3' tabs='L0.5000in L1in L1.5000in L2in L2.5000in L3in L3.5000in L4in'/>
    <par def='3'>С уважением,</par>
    <par def='3'>Пупкин</par>
    <par def='3'>бла бла</par>
    <par def='3'>Тел.: +7 99999999</par></richtext></item>
    <item name='wBody' sign='true' seal='true'><richtext><pardef id='4' leftmargin='1in' hide='notes' tabs='L0.5000in L1in L1.5000in L2in L2.5000in L3in L3.5000in L4in'><code event='hidewhen'><formula>useApplet="True"</formula></code></pardef><par def='4'/></richtext></item>
    <item name='Classification'><text/></item>
    <item name='Subject'><text>test</text></item>
    <item name='$KeepSent' summary='true'><rawitemdata type='4'>AQCU/z+0aaWUUwrgQQDkeSVE</rawitemdata></item>
    <item name='INetCopyTo' sign='true' names='true'><text/></item>
    <item name='$StorageTo'><text>1</text></item>
    <item name='$MessageID'><text>&lt;OF5394A569.B43FFF94-ON442579E4.0041E00A-442579E4.0041EFB5@LocalDomain&gt;</text></item>
    <item name='PostedDate'><datetime>20120418T160012,17+04</datetime></item>
    <item name='Encrypt'><text>0</text></item>
    <item name='RouteTimes' summary='false'><datetimelist><datetimepair><datetime>20120418T160012,49+04</datetime><datetime>20120418T160012,50+04</datetime></datetimepair><datetimepair><datetime>20120418T160012,14+04</datetime><datetime>20120418T160012,28+04</datetime></datetimepair><datetimepair><datetime>20120418T160012,24+04</datetime><datetime>20120418T160012,35+04</datetime></datetimepair><datetimepair><datetime>20120418T160012,47+04</datetime><datetime>20120418T160012,52+04</datetime></datetimepair></datetimelist></item>
    <item name='$Orig' summary='true'><rawitemdata type='4'>AQCU/z+0aaWUUwrgQQDkeSVE</rawitemdata></item>
    <item name='RoutingState'><text/></item>
    <item name='Categories'><text/></item>
    <item name='DeliveredDate'><datetime>20120418T160012,52+04</datetime></item>
    <item name='origform'><text>Memo</text></item>
    <item name='$ConflictAction'><text>1</text></item>
    <item name='DocID'><text>ID-5394A569B43FFF94442579E40041E00A</text></item>
    <item name='CreationDate'><datetime>20120418T155931,00+04</datetime></item>
    <item name='InitialProcessingDate'><datetime>20120418T160636,00+04</datetime></item>
    <item name='StatusDate'><datetime>20120418T163105,00+04</datetime></item>
    <item name='StatusCode'><text>40</text></item>
    <item name='VIEWCODE'><text/></item>
    <item name='LockedBy' names='true'><text/></item>
    <item name='LockedDate'><text/></item>
    <item name='LockedByFIO'><text/></item>
    <item name='LockedOn'><text/></item></document>

    нужно получать текст заключенный между тегами <gif></gif> это изображение кодированное в base64 для дальнейшего декодирования.

    20 апреля 2012 г. 6:56

Ответы

  • $images = @()
    $file = Get-Content file.xml
    
    $lines = $file | Select-String "<gif>|</gif>"
    
    for($i=0;$i -lt $lines.count;$i+=2) { 
        $images+= ,($file[($lines[$i].LineNumber)..($lines[$i+1].LineNumber-2)])
    }
    
    
    
    $images[0] - 1 Картинка

    • Помечено в качестве ответа Max441 20 апреля 2012 г. 8:30
    20 апреля 2012 г. 7:32
    Отвечающий

Все ответы

  • $images = @()
    $file = Get-Content file.xml
    
    $lines = $file | Select-String "<gif>|</gif>"
    
    for($i=0;$i -lt $lines.count;$i+=2) { 
        $images+= ,($file[($lines[$i].LineNumber)..($lines[$i+1].LineNumber-2)])
    }
    
    
    
    $images[0] - 1 Картинка

    • Помечено в качестве ответа Max441 20 апреля 2012 г. 8:30
    20 апреля 2012 г. 7:32
    Отвечающий
  • Другой вариант с регулярными выражениями:

    $file = Get-Content file.xml
    [regex]::matches(($file -join "`n"),"<gif>([^<]+)</gif>","singleline") | %{$_.groups[1].value}

    Но правильнее было бы использовать XPath, так как теоретически <gif> может встретится и в других узлах и даже в содержимом элементов. К сожалению я пока еще плохо умею использовать XPath, и наверняка мой вариант можно улучшить, но кое-что получилось:

    $x = [xml](gc .\test.xml)
    $x.SelectNodes("//*[@name='Body']").richtext.par.picture.gif


    AKA Xaegr, MVP: PowerShell Блог: http://xaegr.wordpress.com


    20 апреля 2012 г. 9:04
    Модератор
  • $x = [xml](gc c:\11.xml)

    выдает ошибку

    Не удается преобразовать значение "System.Object[]" в тип "System.Xml.XmlDocument". Ошибка: "Не удалось найти часть пути "C:\Us
    ers\root\Documents\xmlschemas\domino_8_5_1.dtd"."
    C:\Users\root\AppData\Local\Temp\f3f47f9e-00a7-4ebc-8f6a-0259a7d9bcec.ps1:1 знак:11
    + $x = [xml] <<<< (gc c:\11.xml )
        + CategoryInfo          : NotSpecified: (:) [], RuntimeException
        + FullyQualifiedErrorId : RuntimeException
    

    20 апреля 2012 г. 19:18
  • Удалите из хэдера вот эту часть:

    <!DOCTYPE document SYSTEM 'xmlschemas/domino_8_5_1.dtd'>

    24 апреля 2012 г. 8:12