2011-07-23 35 views
0

我有一種情況,其中有一些舊代碼使用xmlWriter流來解析文件,並且對於每個文件都使用該文件名寫入元素,這在文件名是唯一的時候可以正常工作。php xmlWriter添加到現有節點

$xml = xmlWriter 
foreach file in files 
    $xml->startElement($fileName) 
     ....existing logic adding file content to the new element. 
    $xml->endElement 

但現在,需求改變,我可能有同名的文件,但對於產生XML應該只有每個唯一的文件名的一個元素。

有沒有一種簡單的方法,我可以做到這一點不改變我現有的代碼很多?我知道這有點違背了流的整個觀點,但生活很糟糕,對嗎?

回答

0

我可以看到一些解決方案,但他們都歸結爲創建多個節點。

第一個是多個文件的多個節點,但每個文件都有一個路徑屬性。鑑於這些:

$fl1 = '/home/the_spleen/spleen.txt'; 
$fl2 = '/home/the_bowler/not_enough_beer/spleen.txt'; 

輸出是這樣的:

<spleen path='/home/the_spleen/'><!-- spleenerficy --></spleen> 
<spleen path='/home/the_bowler/not_enough_beer/'><!-- no. just no. --></spleen> 

主要優點?它允許你創建和迭代幾乎完全一樣的方式。損害?它刪除了該節點的parent.children中的一個名稱,即一個節點。

另一種選擇是創建子元素。給定相同的文件:

<spleen> 
    <fl path='/home/the_spleen/'><!-- fl-ify! --></fl> 
    <fl path='/home/the_bowler/not_enough_beer/'><!-- drink! --></fl> 
</spleen> 

好處?唯一文件基名和節點之間有1:1的關係。損害?你將需要添加遞歸邏輯。

給出這些選擇,我會親自去第一個。遞歸邏輯的添加似乎可能導致各種惡劣和煩人的重新分解。但是我從這裏只能看到你的項目有限。