问题描述
我正在使用Ruby的gem plist
更新plist文件,并保存其默认格式后会用换行符将字符串值断开:
之前:
<dict>
<key>message</key>
<string>This is the first line.
this should be the second line.</string>
</dict>
之后:
<dict>
<key>message</key>
<string>This is the first line.
this should be the second line.</string>
</dict>
当我在iOS应用中阅读消息时,消息显示为:
This is the first line.
this should be the second line.
This is the first line.
this should be the second line.
有没有办法保持缩进不变? (我知道plist
gem可让您指定要使用的缩进(默认为制表符),但它适用于使用缩进的每种情况。
谢谢!
解决方法
没有minimal reproducible example的情况下,任何人最多只能猜测你到底在做什么才能导致这个结果。
我的猜测:您必须查看how the gem works。值得注意的是,检查它如何实现IndentedString#<<
。
gem实现了多种“写入值”的方法,我敢打赌,无论您使用的是什么,block.call
都会返回一个数组,其单个元素将为always be independently indented。
尝试使用raw verbatim String
values之类的其他生成方法之一来输出未缩进的值。
如果格式不是您的问题,您可以使用 plist_lite。
例如,运行以下命令:
ruby -rplist_lite -e 'puts PlistLite.dump(PlistLite.load($stdin.read))' <<EOS
<?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>message</key>
<string>This is the first line.
this should be the second line.</string>
</dict>
</plist>
EOS
输出:
<?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>message</key><string>This is the first line.
this should be the second line.</string></dict></plist>
不像plist
,plist_lite
的设计非常简单,没有格式化或编组等花哨的功能,只有2个API,PlistLite#load
和PlistLite#dump
. (界面类似于内置的 JSON
或 YAML
)。
plist_lite
比 plist
快 5 倍以上,因为它是用 C 编写的。如果您了解性能,我想您可以尝试一下。