2015-12-21 75 views
1

標籤我想解析其由稱爲Folker的應用產生一個XML文件。這是抄寫口語文本的應用程序。有時,它節省了,可以用SimpleXML解析在一個良好的格式行,但有時沒有。SimpleXML的去除在節點

這條線是好的:

<contribution speaker-reference="KU" start-reference="TLI_107" end-reference="TLI_109" parse-level="1"> 
    <unparsed>ich überLEG mir das [nochma:l,]</unparsed> 
</contribution> 

這行不:

<contribution speaker-reference="VK" start-reference="TLI_108" end-reference="TLI_111" parse-level="1"> 
    <unparsed>[JA:_a; ]<time timepoint-reference="TLI_109"/>ja,<time timepoint-reference="TLI_110"/>also (.) wie [geSAGT;]</unparsed> 
</contribution> 

在第二行中的SimpleXML除去它們是unparsed節點內的標籤。

我怎樣才能得到SimpleXML來沒有刪除這些標籤,但解析它作爲更深節點或輸出作爲對象,例如像這樣(只是JSON更好地理解):

"contribution": { 
    "speaker-reference": "VK", 
    "start-reference": "TLI_108", 
    "end-reference": "TLI_111", 
    "parse-level": "1", 
    "unparsed": { 
     "content": "[JA:_a; ]", 
     "time": { 
      [ 
       "timepoint-reference": "TLI_109", 
       "content": "ja," 
      ], 
      [ 
       "timepoint-reference": "TLI_110", 
       "content": "also (.) wie [geSAGT;]" 
      ] 
     } 
    } 
} 

回答

0

不,它不刪除它們。這完美的作品(有趣的應用BTW):

<?php 
$string = '<contribution speaker-reference="VK" start-reference="TLI_108" end-reference="TLI_111" parse-level="1"> 
    <unparsed>[JA:_a; ]<time timepoint-reference="TLI_109"/>ja,<time timepoint-reference="TLI_110"/>also (.) wie [geSAGT;]</unparsed> 
</contribution>'; 

$xml = simplexml_load_string($string); 
$t = $xml->unparsed->time[0]; 
print_r($t->attributes()); 
?> 
// output: 
SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [timepoint-reference] => TLI_109 
     ) 

) 

你甚至可以在它們之間迭代:

$times = $xml->unparsed->children(); 
foreach ($times as $t) { 
    $attributes = $t->attributes()); 
    // do sth. useful with them afterwards 
} 

提示: Assumingly,你是在XML樹試圖print_r()var_dump()。這有時還給不透明的結果,因爲大多數的奇蹟發生在幕後。更好地利用echo $xml->asXML();看到實際的XML字符串。

+0

你說得對。它不會刪除它們,但它仍然不能像我預期的那樣工作,或者想讓它工作:D 我需要三個字符串分離,但我認爲這是由該工具生成的XML的問題。 – Heiko