Nokogiri:解析和更新 Plist 中的值
Posted
技术标签:
【中文标题】Nokogiri:解析和更新 Plist 中的值【英文标题】:Nokogiri: parse and update value in Plist 【发布时间】:2020-09-14 06:59:04 【问题描述】:我是 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?
谢谢!
【问题讨论】:
【参考方案1】:如果您不介意使用 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)
【讨论】:
以上是关于Nokogiri:解析和更新 Plist 中的值的主要内容,如果未能解决你的问题,请参考以下文章