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

问题:

    如何读取&lt;true/&gt;&lt;false/&gt; 的值? 如何更新值并保存 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

回答你的问题:

如何读取&lt;true/&gt;&lt;false/&gt; 的值?

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 中的值的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ruby / Nokogiri 解析随机类名

以编程方式更新 info.plist 中的值 [重复]

需要将firebase远程配置中的值更新为我的plist

如何检查 plist 文件中的更新值

如何使用 Nokogiri 解析 HTML 表格?

解析 plist 文件并获取键的值