2010-08-30 76 views
2

我是有點經驗豐富的PHP腳本,但我只是解析XML和所有的好東西。爲什麼使用XML解析器?

我似乎無法包裝我的頭爲什麼會使用單獨的XML解析器而不是使用explode函數,這似乎是一樣簡單。這就是我一直在做(假設在路徑xml.php有效的XML文件):

$contents = file_get_contents("xml.php"); 
$array1 = explode("<a_tag>", $contents); 
$array2 = explode("</a_tag>", $array1[1]); 
$data = $array2[0]; 

所以我的問題是,什麼是XML解析器的實際使用中,如果你能值只是分成數組並從該點提取數據?

在此先感謝! :)

+1

'explode'是隻屬於遊戲開發的方法名稱。 – ChaosPandion 2010-08-30 01:03:42

+0

這是爲什麼? >。> – esqew 2010-08-30 01:07:49

+0

**請**,否... – SLaks 2010-08-30 01:13:55

回答

10

簡而言之,它的一致性。在XML廣泛使用之前,有許多未公開的格式用於保存文件中的信息。 XML背後的動機之一是創建一個定義良好的標準文檔格式。有了這種明確定義的格式,只要文檔遵循上述明確定義的格式,就可以開發一套通用的解析工具,這些解析工具可以一致地處理文檔。

在一些特定情況下,您的示例代碼將起作用。但是,如果文檔更改

... 
<!-- adding an attribute --> 
<a_tag foo="bar">Contents of the Tag</a_tag> 
... 

... 
<!-- adding a comment to the contents --> 
<a_tag>Contents <!-- foobar --> of the Tag</a_tag> 
... 

您的解析代碼可能會中斷。使用正確定義的XML解析器編寫的代碼不會。

+0

感謝您的解釋。 – esqew 2010-08-30 01:42:28

7

XML解析器:

  • 手柄編碼
  • 可能有XPath支持
  • 讓您輕鬆地修改和保存XML;追加/刪除子節點,添加/刪除屬性等
  • 不需要加載整個文件到內存中(除了從DOM解析器)
  • 知道關於命名空間
  • ...
14

請原諒我沒有進入細節,但對於初學者嘗試解析

$contents = '<a xmlns="urn:something"> 
    <a_tag> 
    <b>..</b> 
    <related> 
     <a_tag>...</a_tag> 
    </related> 
    </a_tag> 
    <foo:a_tag xmlns:foo="urn:something"> 
    <![CDATA[This is another <a_tag> element]]> 
    </foo:a_tag> 
</a>'; 

與爆炸的方法。當你完成我們可以繼續一些棘手的事情;-)

6

如果a_tag有一個屬性,你將如何爆炸同一個文件?畢竟,

explode("<a_tag>" ...的工作方式不同於explode("<a_tag attr='value'>" ...

XML解析器理解XML規範。爆炸只能處理最簡單的情況,並且很可能會在很多情況下失敗。

1

使用經驗證的XML解析方法將使代碼更易於維護和閱讀。如果模式發生變化,它也會使它更容易適應,並且可以更容易地確定錯誤條件。 XPath和XSLT的存在是有原因的,它們是以合理,清晰的方式處理XML數據的經證明的方式。我建議你使用適用於你的情況的任何一種。記住,僅僅因爲你認爲你只是爲了一個特定的目的而編寫代碼,你永遠不會知道一段寫得很好的代碼可以發展成什麼樣子。