Plist/XML 在 Racket 中解析
Plist/XML parsing in Racket
希望得到一些超出我经验的帮助。我有以下列表。我希望提取的信息大约是向下的四分之一,"A/Amemiya-1984-Tobit-00.pdf"。搜索 Racket 文档显示 xml/plist
。但是,因为我之前没有使用过解析 XML 或 plists,所以我被卡住了。如果有人至少能让我入门,我将不胜感激。完整的解决方案也非常受欢迎。非常感谢。
<?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>
我不太确定,但我想试探一下我认为你的意思:此文件包含归档数据,而你想解码 'data' 块。是吗?
如果是这样,我很抱歉地报告这个问题真的与plists无关。具体来说,plist 格式是一种将结构化数据序列化为文件的方式。当你使用 plist 解码器时,它会告诉你有一个字典,其中键 '$archiver' 与字符串 'NSKeyed Archiver' 相关联,字符串 '$objects' 与包含字符串和一本字典...等等,直到你深入到你感兴趣的部分,在那里你会了解到键 'NS.Data' 与数据
相关联
" AAAAAAF8AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAAAAA
AAAAQkQAAf////8ZQW1lbWl5YS0xOTg0LVRvYml0LTAwLnBkZgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////
/wAAAAAAAAAAAAAAAAAAAAAAogY3UAAAAAAAAAAAAAAAAAAUEA
AAIAOi86VXNlcnM6Z2hvZXRrZXI6QmliRGVza1BhcGVyczpBOkFt
ZW1peWEtMTk4NC1Ub2JpdC0wMC5wZGYADgA0ABkAQQBtAGUAbQBp
AHkAYQAtADEAOQA4ADQALQBUAG8AYgBpAHQALQAwADAALgBwAGQA
ZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASADhVc2Vy
cy9naG9ldGtlci9CaWJEZXNrUGFwZXJzL0EvQW1lbWl5YS0xOTg0
LVRvYml0LTAwLnBkZgATAAEvAAAVAAIAD///AAA=
“
...您已经知道了。也就是plist格式描述了结构,但是没有说明这些字符串的含义。
现在,话虽如此,看起来该字符串确实是 base64 编码的。让我们尝试用 base64 解码它...
...是的,看起来是 base64 编码的。结果为
"|
Macintosh HDBD????Amemiya-1984-Tobit-00.pdf????
cuA://:Users:ghoetker:BibDeskPapers:A:Amemiya-1984-Tobit-00.pdf4Amemiya-1984-Tobit-00.pdf
Macintosh HD8Users/ghoetker/BibDeskPapers/A/Amemiya-1984-Tobit-00.pdf/??% "
这是否回答了您的问题?
希望得到一些超出我经验的帮助。我有以下列表。我希望提取的信息大约是向下的四分之一,"A/Amemiya-1984-Tobit-00.pdf"。搜索 Racket 文档显示 xml/plist
。但是,因为我之前没有使用过解析 XML 或 plists,所以我被卡住了。如果有人至少能让我入门,我将不胜感激。完整的解决方案也非常受欢迎。非常感谢。
<?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>
我不太确定,但我想试探一下我认为你的意思:此文件包含归档数据,而你想解码 'data' 块。是吗?
如果是这样,我很抱歉地报告这个问题真的与plists无关。具体来说,plist 格式是一种将结构化数据序列化为文件的方式。当你使用 plist 解码器时,它会告诉你有一个字典,其中键 '$archiver' 与字符串 'NSKeyed Archiver' 相关联,字符串 '$objects' 与包含字符串和一本字典...等等,直到你深入到你感兴趣的部分,在那里你会了解到键 'NS.Data' 与数据
相关联" AAAAAAF8AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAAAAA AAAAQkQAAf////8ZQW1lbWl5YS0xOTg0LVRvYml0LTAwLnBkZgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//// /wAAAAAAAAAAAAAAAAAAAAAAogY3UAAAAAAAAAAAAAAAAAAUEA AAIAOi86VXNlcnM6Z2hvZXRrZXI6QmliRGVza1BhcGVyczpBOkFt ZW1peWEtMTk4NC1Ub2JpdC0wMC5wZGYADgA0ABkAQQBtAGUAbQBp AHkAYQAtADEAOQA4ADQALQBUAG8AYgBpAHQALQAwADAALgBwAGQA ZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASADhVc2Vy cy9naG9ldGtlci9CaWJEZXNrUGFwZXJzL0EvQW1lbWl5YS0xOTg0 LVRvYml0LTAwLnBkZgATAAEvAAAVAAIAD///AAA= “
...您已经知道了。也就是plist格式描述了结构,但是没有说明这些字符串的含义。
现在,话虽如此,看起来该字符串确实是 base64 编码的。让我们尝试用 base64 解码它...
...是的,看起来是 base64 编码的。结果为
"| Macintosh HDBD????Amemiya-1984-Tobit-00.pdf???? cuA://:Users:ghoetker:BibDeskPapers:A:Amemiya-1984-Tobit-00.pdf4Amemiya-1984-Tobit-00.pdf Macintosh HD8Users/ghoetker/BibDeskPapers/A/Amemiya-1984-Tobit-00.pdf/??% "
这是否回答了您的问题?