如何解决Nokogiri:解析和更新Plist中的值
我是Ruby的新手,需要处理一家书店的plist,比如说我有一个plist,
<plist>
<array>
<dict>
<key>Name</key>
<string>An Old Man and the Sea</string>
<key>Available</key>
<true/>
</dict>
<dict>
<key>Name</key>
<string>The Hitchhiker's Guide To Galaxy</string>
<key>Available</key>
<false/>
</dict>
</array>
</plist>
我需要切换书籍的可用性,并且我已经阅读了plist并将书籍阵列解析为books
:
books.map do |book|
book.xpath("key/text()") # e.g. ["Name","Available"]
book.xpath("string/text()") # e.g. ["An Old Man and the Sea"]
end
问题:
- 如何读取值
<true/>
和<false/>
? - 如何更新值并保存plist?
谢谢!
解决方法
如果您不介意使用 gem,则可以使用 plist_lite。
ruby -r plist_lite -e 'p PlistLite.load($stdin.read)' <<EOS
<plist>
<array>
<dict>
<key>Name</key>
<string>An Old Man and the Sea</string>
<key>Available</key>
<true/>
</dict>
<dict>
<key>Name</key>
<string>The Hitchhiker's Guide To Galaxy</string>
<key>Available</key>
<false/>
</dict>
</array>
</plist>
EOS
输出:
[{"Name"=>"An Old Man and the Sea","Available"=>true},{"Name"=>"The Hitchhiker's Guide To Galaxy","Available"=>false}]
如果你想自己用nokogiri
来做,可以参考这里plist_lite
的源代码,它也用了nokogiri
:
https://github.com/tonytonyjan/plist_lite/blob/2de0506/lib/plist_lite.rb#L37-L57
回答您的问题:
如何读取值 <true/>
和 <false/>
?
parsed = PlistLite.load(plist_string)
parsed.map{ _1['Available'] }
如何更新值并保存 plist?
parsed = PlistLite.load(plist_string)
parsed.first['Available']
IO.write 'test.plist',PlistLite.dump(parsed)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。