plist
(Property List
)
plist
是一种特定格式的XML
。
我们知道,XML
都有一个DTD(Document Type Definition)
,用来说明这个XML
的元素的数据类型的,plist
的DTD
定义为:http://www.apple.com/DTDs/PropertyList-1.0.dtd
plist
中支持的类型包括:
plist类型 | Objective-C类型 | Java类型 | JavaScript类型 |
---|---|---|---|
dict | NSDictionary | Map | Object |
array | NSArray | ArrayList | Array |
string | NSString | String | String |
integer | NSInteger | int | Number |
real | CGFloat | float | double | Number |
true | YES | true | true |
false | NO | false | false |
Date | NSDate | Date | Date |
Data |
dict
就是key-value
对形式的数据,这种结构在不同的语言中有不同的叫法,比如: 在Objective-C中称为NSDictionary
, 在Java中称为Map
, 在JavaScript里就是叫做Object
。
dict
中的key
都是字符串,value
可以是任意类型。
示例:
<?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>phoneNumbers</key>
<array>
<string>15656059398</string>
<string>15656059399</string>
</array>
<key>married</key>
<false/>
<key>male</key>
<true/>
<key>birthday</key>
<date>2000-04-22T06:23:04Z</date>
<key>age</key>
<integer>18</integer>
<key>weight</key>
<real>75.5</real>
<key>location</key>
<string>中国北京市朝阳区</string>
</dict>
</plist>
说明:
前面3行都是固定写法。
从第4行开始的节点,我们称为RootNode
,也就是根节点,根节点只能是dict
或者array
。
上面的例子中,根节点就是dict
,被dict
和/dict
包裹的内容就是多个key-value
形式的数据, 其中key
为一行,紧挨着的后面的行就是该key
对应的value
。
array
就是数组,这在不同的语言里的中文称呼都是一样的。
array
里可以放任意相同数据类型的数据。
示例1:
<?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>phoneNumbers</key>
<array>
<string>15656059398</string>
<string>15656059399</string>
</array>
...
</dict>
</plist>
示例2:
<?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">
<array>
<dict>
<key>xx</key>
<array>
<integer>100</integer>
<integer>150</integer>
<integer>200</integer>
<integer>250</integer>
</array>
...
</dict>
</array>
</plist>
string
就是字符串,这在不同的语言里的中文称呼都是一样的。
示例:
<?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>phoneNumbers</key>
<array>
<string>15656059398</string>
<string>15656059399</string>
</array>
<key>location</key>
<string>中国北京市朝阳区</string>
</dict>
</plist>
integer
就是十进制的整数。整数分为正整数和负整数,都是允许的。
示例:
<?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>xx</key>
<array>
<integer>-100</integer>
<integer>150</integer>
<integer>-200</integer>
<integer>250</integer>
</array>
<key>age</key>
<integer>18</integer>
</dict>
</plist>
real
就是十进制的实数(浮点数),我们通常称为double
类型的数字,其实就是包含小数点的数字。
示例:
<?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>xx</key>
<array>
<real>-100.0</real>
<real>150.0</real>
<real>-200.00</real>
<real>250.00</real>
</array>
<key>weight</key>
<real>75.5</real>
</dict>
</plist>
true
是Boolean
类型的常量。
示例:
<?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>xx</key>
<array>
</true>
</true>
</true>
</true>
</array>
<key>male</key>
</true>
</dict>
</plist>
false
是Boolean
类型的常量。
示例:
<?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>xx</key>
<array>
</false>
</true>
</true>
</false>
</array>
<key>married</key>
</false>
</dict>
</plist>
date
是ISO 8601格式化的日期和时间。
示例:
<?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>xx</key>
<array>
<date>2000-04-22T06:23:04Z</date>
<date>2000-04-22T06:23:04Z</date>
<date>2000-04-22T06:23:04Z</date>
<date>2000-04-22T06:23:04Z</date>
</array>
<key>birthday</key>
<date>2000-04-22T06:23:04Z</date>
</dict>
</plist>
data
是经过Base64编码的二进制数据。
示例:
<?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>xx</key>
<array>
<data>SSBMb3ZlIHlvdSEgeW91IGxvdmUgbWUgdG9vPw==</data>
<data>SSBMb3ZlIHlvdSEgeW91IGxvdmUgbWUgdG9vPw==</data>
<data>SSBMb3ZlIHlvdSEgeW91IGxvdmUgbWUgdG9vPw==</data>
<data>SSBMb3ZlIHlvdSEgeW91IGxvdmUgbWUgdG9vPw==</data>
</array>
<key>image</key>
<data>SSBMb3ZlIHlvdSEgeW91IGxvdmUgbWUgdG9vPw==</data>
</dict>
</plist>
1、打开Xcode
2、通过菜单File -> New -> File..
菜单打开如下界面:
3、选择任意Tab
中的Property List
后,点击Next
按钮,出现如下界面:
4、输入要保存的文件名后,点击Create
按钮,出现如下界面:
使用该工具创建的plist
文件能够保证是正确的,如果您手动创建,很可能会创建出不合法的plist
文件。
在macOS系统中自带了处理plist
格式的工具PlistBuddy
在线plist
与JSON
互转工具:http://json2plist.sinaapp.com
在macOS系统中自带了plutil
,他能够将plist
转化为其他格式, 使用方法如下:
plutil -convert json in.plist -o out.json
dd-plist
是一个Google
开源的处理plist
格式的Java
库。
dd-plist
在GitHub上的网址:https://github.com/3breadt/dd-plist