在PHP

时间:2017-07-25 13:27:30

标签: php xcode parsing plist

我试图处理遗留系统中的数据,这似乎是在ASCII plist format中。有没有一种简单的方法来解析这些或将它们转换为更容易处理的格式?理想情况下,输出应该是嵌套数组。 (这些文件也由GNUstep和XCode项目文件使用)

存在library,但即使使用Apple的NSDictionary样本,他们的样本也会失败:(我的yacc / lex知识不足以快速尝试修复...)(它失败了任何未加引号的值或键名)

Apple的示例文件:

{
    AnimalSmells = { pig = piggish; lamb = lambish; worm = wormy; };
    AnimalSounds = { pig = oink; lamb = baa; worm = baa;
                    Lisa = "Why is the worm talking like a lamb?"; };
    AnimalColors = { pig = pink; lamb = black; worm = pink; };
}

plist文件的可用库似乎只支持XML和二进制plist文件,而不支持ASCII文件。

在一个地方实现一个完整的库来解析遗留系统的某些输出似乎有点过分......

我在其他一些(非PHP)代码中看到的一种丑陋的方法是使用正则表达式来修改数据,直到其他方法可以解析它为止。

对于链接库:

Lexer中,这可能是问题的一部分:

stringliteral = /\"(\\.|[^\\\"])*\"/

(字符串需要引用)(该库似乎是针对特定用例编写的,我的用例似乎与此相差甚远......)

使用plex编译词法分析器也会导致不同的源文件,这会随机修改以查看棘手的事情......

1 个答案:

答案 0 :(得分:0)

几乎看起来像JSON!您可以尝试进行字符串替换吗?

replace = with :
replace ; with ,
replace ; } with } //分号空格closed_curly

然后你可以json_decode($string);把它变成一个数组!

如果您对此感到厌烦,请尝试使用https://github.com/rodneyrehm/CFPropertyList

等库 祝你好运!