Разбор Plist / XML в Racket - PullRequest
0 голосов
/ 11 мая 2018

Надеюсь на помощь с чем-то, что выходит за рамки моего опыта.У меня есть следующий список.Информация, которую я хочу извлечь, находится примерно на четверти ниже, "A / Amemiya-1984-Tobit-00.pdf".Поиск документов Ракетки показал xml/plist.Однако из-за того, что я раньше не работал с анализом XML или списков, я застрял.Если бы кто-нибудь мог хотя бы начать меня, я был бы очень признателен.Комплексные решения также очень приветствуются.Большое спасибо.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>$archiver</key>
    <string>NSKeyedArchiver</string>
    <key>$objects</key>
    <array>
        <string>$null</string>
        <dict>
            <key>$class</key>
            <dict>
                <key>CF$UID</key>
                <integer>7</integer>
            </dict>
            <key>NS.keys</key>
            <array>
                <dict>
                    <key>CF$UID</key>
                    <integer>2</integer>
                </dict>
                <dict>
                    <key>CF$UID</key>
                    <integer>3</integer>
                </dict>
            </array>
            <key>NS.objects</key>
            <array>
                <dict>
                    <key>CF$UID</key>
                    <integer>4</integer>
                </dict>
                <dict>
                    <key>CF$UID</key>
                    <integer>5</integer>
                </dict>
            </array>
        </dict>
        <string>relativePath</string>
        <string>aliasData</string>
        <string>A/Amemiya-1984-Tobit-00.pdf</string>
        <dict>
            <key>$class</key>
            <dict>
                <key>CF$UID</key>
                <integer>6</integer>
            </dict>
            <key>NS.data</key>
            <data>
            AAAAAAF8AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAAAA
            AAAAQkQAAf////8ZQW1lbWl5YS0xOTg0LVRvYml0LTAwLnBkZgAA
            AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////
            /wAAAAAAAAAAAAAAAAABAAMAAAogY3UAAAAAAAAAAAAAAAAAAUEA
            AAIAOi86VXNlcnM6Z2hvZXRrZXI6QmliRGVza1BhcGVyczpBOkFt
            ZW1peWEtMTk4NC1Ub2JpdC0wMC5wZGYADgA0ABkAQQBtAGUAbQBp
            AHkAYQAtADEAOQA4ADQALQBUAG8AYgBpAHQALQAwADAALgBwAGQA
            ZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASADhVc2Vy
            cy9naG9ldGtlci9CaWJEZXNrUGFwZXJzL0EvQW1lbWl5YS0xOTg0
            LVRvYml0LTAwLnBkZgATAAEvAAAVAAIAD///AAA=
            </data>
        </dict>
        <dict>
            <key>$classes</key>
            <array>
                <string>NSMutableData</string>
                <string>NSData</string>
                <string>NSObject</string>
            </array>
            <key>$classname</key>
            <string>NSMutableData</string>
        </dict>
        <dict>
            <key>$classes</key>
            <array>
                <string>NSDictionary</string>
                <string>NSObject</string>
            </array>
            <key>$classname</key>
            <string>NSDictionary</string>
        </dict>
    </array>
    <key>$top</key>
    <dict>
        <key>root</key>
        <dict>
            <key>CF$UID</key>
            <integer>1</integer>
        </dict>
    </dict>
    <key>$version</key>
    <integer>100000</integer>
</dict>
</plist>

1 Ответ

0 голосов
/ 12 мая 2018

Я очень неуверен, но я собираюсь сделать попытку того, что, по-моему, вы имеете в виду: этот файл содержит архивные данные, и вы хотите декодировать блок «данных».Это правильно?

Если так, извините, что сообщаю, что эта проблема действительно не имеет отношения к спискам.В частности, формат plist - это способ сериализации структурированных данных в файл.Когда вы используете plist-декодер, он скажет вам, что есть словарь, в котором ключ '$ archiver' связан со строкой 'NSKeyed Archiver', а строка '$ objects' связана с массивом, содержащим строку исловарь ... и т. д., пока не дойдете до интересующей вас части, где вы узнаете, что ключ 'NS.Data' связан с данными

"AAAAAAF8AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAAAAAA AAAA/AQAAf/ 8ZQW1lbWl5YS0xOTg0LVRvYml0LTAwLnBkZgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA //// / wAAAAAAAAAAAAAAAAABAAMAAAogY3UAAAAAAAAAAAAAAAAAAUEA AAIAOi86VXNlcnM6Z2hvZXRrZXI6QmliRGVza1BhcGVyczpBOkFt ZW1peWEtMTk4NC1Ub2JpdC0wMC5wZGYADgA0ABkAQQBtAGUAbQBp AHkAYQAtADEAOQA4ADQALQBUAG8AYgBpAHQALQAwADAALgBwAGQA ZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASADhVc2Vy cy9naG9ldGtlci9CaWJEZXNrUGFwZXJzL0EvQW1lbWl5YS0xOTg0 LVRvYml0LTAwLnBkZgATAAEvAAAVAAIAD /// AAA = «

1006 * ... что вы вроде уже знали.То есть формат plist описывает структуру, но не определяет значение этих строк.

Теперь, с учетом всего сказанного, похоже, что эта строка закодирована в base64.Давайте попробуем декодировать его с base64 ...

... Да, похоже, что он закодирован в base64.Это выглядит как

"| Macintosh HDBD ?? Amemiya-1984-Tobit-00.pdf ???? cuA: /: Пользователи: ghoetker: BibDeskPapers: A: Amemiya-1984-Tobit-00.pdf4Amemiya-1984-Tobit-00.pdf Macintosh HD8Users / ghoetker / BibDeskPapers / A / Amemiya-1984-Tobit-00.pdf / ??% "

Это отвечает на ваш вопрос?

...