2013-04-21 138 views
1

我正在搞亂Final Cut Pro X在執行導出時吐出的XML。我正在使用SimpleXML進行解析並遇到一些問題。我已經使用的是PHP網站上的例子 - http://www.php.net/manual/en/simplexml.examples-basic.php但我的XML是一個比較複雜 - 這裏有一個例子:使用SimpleXML解析FCPx 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 :: __構造():實體:第14行:分析器錯誤:(NOTE:此錯誤是無關的我發佈的代碼)。

這是我一直在玩弄代碼:

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

我敢肯定,這是簡單的東西。例如。我看到我解析的XML文件使用雙引號,而示例使用的是單引號。也許它不喜歡文件中的某些特殊字符,FCPx XML看起來相當複雜,而且我在編程方面很謙虛,但我認爲它會編寫一段腳本可以很有趣,該腳本會將我所有的剪​​輯名稱,總長度,關鍵字和其他內容填充到格式良好的頁面或文檔中。

回答

0

我不熟悉你的XML解析庫,所以不能直接對解析器本身說話。 然而,看您發佈的XML,我注意到一個奇怪的巧合:錯誤說線14,並在您XML的十四號線從換行開始內報價:

<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"> 

祝您好運!