2011-07-23 58 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的关系。损害?你将需要添加递归逻辑。

给出这些选择,我会亲自去第一个。递归逻辑的添加似乎可能导致各种恶劣和烦人的重新分解。但是我从这里只能看到你的项目有限。

相关问题