【问题标题】:Easy way to parse ASCII plist files in PHP在 PHP 中解析 A​​SCII plist 文件的简单方法
【发布时间】:2017-12-31 11:14:02
【问题描述】:

我正在尝试处理来自旧系统的数据,该系统似乎位于 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 编译词法分析器也会产生不同的源文件,这使得随机修改以查看会发生什么很棘手......

【问题讨论】:

    标签: php xcode parsing plist


    【解决方案1】:

    几乎看起来像 JSON!你可以尝试做一个字符串替换?

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

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

    如果你觉得这很老套,试试https://github.com/rodneyrehm/CFPropertyList 之类的库

    祝你好运!

    【讨论】:

    • CFPropertyList 根据文档仅支持二进制和 XML plist 文件,不支持 pre-OS X (NEXTSTEP timeframe) ASCII 文件...
    • 这似乎更有用......(非常无证,但它实际上解析了我的数据......答案格式可能很有用)
    • (json_decode() 方法存在与 ascii-plist-decoder 库相同的缺陷 - 需要引用键名和所有值...)
    猜你喜欢
    • 2022-10-16
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2012-05-23
    相关资源
    最近更新 更多