2012-10-18 99 views
1

通常,我的.xml文檔包含錯誤。無論如何,我想分析我的文檔,直到出錯或嘗試自動修復錯誤。那可能嗎?如何使用SimpleXML解析XML,從而忽略錯誤

我已經試過這一點,但它不工作

$xml = simplexml_load_file($url, "SimpleXMLElement", array(LIBXML_NOERROR, LIBXML_ERR_NONE)); 

    if (!$xml) { 
     echo "Failed loading XML\n"; 
     foreach(libxml_get_errors() as $error) { 
      echo "\t", $error->message; 
     } 
    } 
+0

那你試試至今?你的腳本只輸出錯誤。我沒有看到你做任何事情來實際解決問題。 – hakre

回答

10

從PHP DOC simplexml_load_file選項應該是int數組不

更換

$xml = simplexml_load_file($url, "SimpleXMLElement", array(LIBXML_NOERROR, LIBXML_ERR_NONE)); 
                 ^------- You are using array 

隨着

$xml = simplexml_load_file($url, "SimpleXMLElement", LIBXML_NOERROR | LIBXML_ERR_NONE); 

不是抑制這種錯誤的,你可以和修正XML

bad.xml

<Family> 
    <name>Hankre</name> 
    <adults>2</adults> 
    <kids > 16 </kids> 
    <food> 
     <tag>Nice </tag> 
     <tag>Food </tag> 
     <tag /> 

修復XML

$config = array(
    'indent' => true, 
    'clean' => true, 
    'input-xml' => true, 
    'output-xml' => true, 
    'wrap'  => false 
    ); 

$tidy = new Tidy(); 
$xml = $tidy->repairfile($badXML, $config); 
echo $xml; 

輸出

<Family> 
    <name>Hankre</name> 
    <adults>2</adults> 
    <kids>16</kids> 
    <food> 
     <tag>Nice</tag> 
     <tag>Food</tag> 
     <tag /> 
    </food> 
</Family> 
+0

@TRiG謝謝..更正 – Baba

+0

好的,但XML不會被解析,因爲SimpleXML有錯誤。我想要解析至少達到第一個錯誤。你知道怎麼做嗎? – sparkle

+0

是的......這完全是不同的,但它可以做到..你想在這裏,或使它成爲一個新的時間,這樣會有利於他人 – Baba