使用SimpleXML解析FCPx XML文件

时间:2013-04-21 19:33:11

标签: xml xml-parsing simplexml

我正在搞乱当你进行导出时Final Cut Pro X吐出的XML。我正在使用SimpleXML进行解析并遇到一些问题。我使用了php网站上的示例 - http://www.php.net/manual/en/simplexml.examples-basic.php,但我的XML有点复杂 - 这是一个例子:

    <fcpxml>
    <project name="Rought Cut 2" uid="A9BCAB6E-6D54-4809-834D-F764A741A71B" eventID="909C357C-BB9B-41E3-87A2-FC6AE3E940A0" location="file://localhost/Volumes/VideoMain/Final%20Cut%20Projects/Storm%20Chasing%20test/Rought%20Cut%202/">
        <resources>
            <format id="r1" name="FFVideoFormat1080p5994" frameDuration="1001/60000s" width="1920" height="1080"/>
            <projectRef id="r2" name="Storm Chasing June 7" uid="909C357C-BB9B-41E3-87A2-FC6AE3E940A0"/>
            <media id="r3" name="Start teaser" uid="Wn75vMb1R2anXdP2aQX5+g" projectRef="r2">
                <sequence duration="393393/72000s" format="r4" tcStart="0s" tcFormat="NDF" audioLayout="stereo" renderFormat="FFRenderFormatProRes422Proxy">
                    <spine>
                        <clip offset="0s" name="HS700 - 00023" duration="445445/120000s" start="5630434810/60000s" format="r1" tcFormat="DF">
                            <video offset="5629760136/60000s" ref="r5" name="00023 - v1" duration="897897/60000s" start="5629760136/60000s">
                                <audio lane="-1" offset="4503808109/48000s" ref="r5" name="00023 - a1" duration="719039/48000s" start="4503808109/48000s" role="dialogue" outCh="L, R"/>
                            </video>
                            <title lane="1" offset="2252173924/24000s" ref="r6" name="Basic Title: Amateur Storm Chasing Mk2
" duration="360360/120000s" start="86486400/24000s">
                                <text>Amateur Storm Chasing Mk2
</text>
                            </title>
                            <keyword start="234573339/2500s" duration="897897/60000s" value="Hs700"/>
                            <metadata>
                                <md key="com.apple.proapps.studio.reel" value="TS700"/>
                                <md key="com.apple.proapps.studio.scene" value="89"/>
                            </metadata>
                        </clip>
                        <clip offset="267267/72000s" name="GH2 - 2012-06-07 20:27:30" duration="126126/72000s" start="45045/72000s" tcFormat="NDF">
                            <video offset="0s" ref="r7" name="2012-06-07 20:27:30 - v1" duration="1966965/72000s">
                                <audio lane="-1" offset="0s" ref="r7" name="2012-06-07 20:27:30 - a1" duration="1311310/48000s" role="dialogue" outCh="L, R"/>
                            </video>

XML不仅仅是简单的123,但是我想知道如何解析它。这是我正在使用但看着我的MAMP / php错误日志我看到我收到很多错误 - SimpleXMLElement :: __ construct():实体:第14行:解析器错误:(NOte:此错误与我发布的代码)。

这是我一直在玩的代码:

<?php
include 'example.php';
$fcpxml = new SimpleXMLElement($xmlstr);
echo $fcpxml->project['name'];
?>

我确信这很简单。例如。我看到我正在解析的XML文件使用双引号,示例使用单引号。也许它不喜欢文件中的某些特殊字符,FCPx XML看起来很复杂而且我很喜欢编程,但我认为它会编写一个脚本,在一个漂亮的格式化的页面或文档中吐出我的所有剪辑名称,总长度,关键字和其他东西,这很有趣。

1 个答案:

答案 0 :(得分:0)

我不熟悉您的XML解析库,因此无法直接与解析器本身对话。 然而,看看你发布的XML,我注意到一个奇怪的巧合:错误说明你的XML中的第14行和第14行是从引号中的换行符开始的:< / p>

<title lane="1" offset="2252173924/24000s" ref="r6" name="Basic Title: Amateur Storm Chasing Mk2
" duration="360360/120000s" start="86486400/24000s">

您的属性name在第一行有开头引号和Basic Title: Amateur Storm Chasing Mk2,但结束引用在下一行。解析器一般讨厌在引用字符串中换行,除非它以非常特定的方式完成。为了确保这不仅仅是从粘贴到Stack Overflow,请查看包含XML的原始文件,看看它是否有换行符(使窗口更宽,关闭显示选项中的换行符等) 。如果是,请将线重新组合在一起再试一次:

<title lane="1" offset="2252173924/24000s" ref="r6" name="Basic Title: Amateur Storm Chasing Mk2" duration="360360/120000s" start="86486400/24000s">
祝你好运!