2013-03-22 101 views
1

我希望有人能幫助,因爲這會讓我瘋狂。使用DOm和PHP爲現有的XML文檔添加節點

我需要使用PHP更新現有的XML文件。如果其中一個節點中的值等於某個值,那麼我想添加一個新的子元素並在其中包含一些文本。

下面是XML文件的例子:

<properties> 
    <property> 
    <address> 
     <street>Example Road</street> 
     <locality>Fitzrovia</locality> 
     <town>London</town> 
     <postcode>NW1</postcode> 
    </address> 
    </property> 
    <property> 
    <address> 
     <street>Default Street</street> 
     <locality>Sample</locality> 
     <town>London</town> 
     <postcode>EC1</postcode> 
    </address> 
    </property> 
</properties> 

這是我目前所面對的PHP:

$dom = new DOMDocument(); 
$dom->load('http://example.com/example.xml'); 
$xpath = new DOMXPath($dom); 

$postcode = $xpath->query('property/address/postcode'); 
foreach($postcode as $region) 
{ 
    $r = $region->nodeValue; 
    if (preg_match('/^nw(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'North West London'; 
    } 
    else if (preg_match('/^n(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'North London'; 
    } 
    else if (preg_match('/^e(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'East London'; 
    } 
    else if (preg_match('/^se(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'South East London'; 
    } 
    else if (preg_match('/^sw(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'South West London'; 
    } 
    else if (preg_match('/^w(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'West London'; 
    } 
    else if (preg_match('/^ec(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'East Central London'; 
    } 
    else if (preg_match('/^wc(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'West Central London'; 
    } 
    else { 
     $region->nodeValue = 'Outer London'; 
    } 
} 

$dom->save('export.xml'); 

我所要做的,是如果郵政編碼等於特定值,那麼一個新的子節點將被添加到帶有一些文本的'地址'節點。

我遇到了一些問題,我可以得到一個新的子節點生成,但它會增加很多,所有隻在XML文件的一部分,而不是每個'屬性'內的一個isntance,節點。

我希望這是有道理的,因爲我真的可以做一些援助。

感謝提前:)

回答

1

您應該使用DOMDocument::createElement創建一個新的節點,並DOMNode::appendChild追加新的節點。

實施例:

if (preg_match('/^nw(?=[0-9]*)/i', $r)) { 
    $element = $dom->createElement('your_node_name', 'North West London'); 
    $region->parentNode->appendChild($element); 
} 
+0

感謝您的響應@akkie。我一直在嘗試,但它一直出錯。我最終將所有新節點都集中在XML文件中,而不是每個節點都添加到「屬性/屬性/地址」節點。任何想法,我可能會出錯? – DL1984 2013-03-22 13:35:02

+0

我在我的答案中添加了一個示例。 – akkie 2013-03-22 14:27:57

+0

謝謝@akkie。我現在就試試這個。 – DL1984 2013-03-22 14:43:15