2011-03-05 42 views
0
$employees = array(); 
    $employees [] = array( 
    'name' => 'Albert', 
    'age' => '34', 
    'salary' => "$1000000000" 
); 
    $employees [] = array( 
    'name' => 'Claud', 
    'age' => '20', 
    'salary' => "$200000000" 
); 

    $doc = new DOMDocument(); 
    $doc->load('xml/text.xml'); 
    $doc->formatOutput = true; 

    $r = $doc->createElement("employees"); 
    $doc->appendChild($r); 

    foreach($employees as $employee) 
    { 
    $b = $doc->createElement("employee"); 

    $name = $doc->createElement("name"); 
    $name->appendChild( 
    $doc->createTextNode($employee['name']) 
); 
    $b->appendChild($name); 

    $age = $doc->createElement("age"); 
    $age->appendChild( 
    $doc->createTextNode($employee['age']) 
); 
    $b->appendChild($age); 

    $salary = $doc->createElement("salary"); 
    $salary->appendChild( 
    $doc->createTextNode($employee['salary']) 
); 
    $b->appendChild($salary); 

    $r->appendChild($b); 
    } 


    $doc->save("xml/text.xml") 

此現有代碼加載並將數據寫入到xml文件,但是現在它一直重複創建父節點「employees」。我如何將子節點追加到xml文件中已存在的員工節點?在使用php的節點之間添加xml數據

+0

原本文檔中是否只有一個'員工'節點? – 2011-03-05 04:59:57

回答

0

假設你的根節點不employees,那只有一個employees節點,更換這些線路:

$r = $doc->createElement('employees'); 
$doc->appendChild($r); 

有了這些:

$tags = $doc->getElementsByTagName('employees'); 
if ($tags->length) { 
    $r = $tags->item(0); 
} else { 
    $r = $doc->createElement('employees'); 
    $doc->appendChild($r); 
} 

此代碼使用在文檔中找到的第一個employees節點。如果沒有找到,它會在文檔的末尾追加一個。實際上,我猜你想要在文檔內部的某個位置插入員工節點,而不是末尾......

+0

是的,應該只有員工。那麼所有的子節點都像員工一樣進入內部。 – Adam 2011-03-05 05:43:18

+0

如果我只想要一個具有屬性的節點,該怎麼辦? – Adam 2011-03-05 05:55:58

+0

@Adam我不確定你的意思是「一個具有屬性的節點」。你是否認爲每個人都有一個「僱員」節點,名稱,年齡和工資屬性?如果是這樣,你可以像'$ b-> setAttribute('name',$ employee ['name']);' – 2011-03-05 13:54:40

0

假設你已經在XML/text.xml的XML結構的 '僱員' 要替換該行根節點:

$r = $doc->createElement('employees'); 

這一行:

$r = $doc->documentElement;