2012-10-09 16 views
0

我想在我的XML文檔中給一個數字加上+1,如果它只是一個沒有問題,但是...如果我想更新2個節點,它會出錯?添加數量到節點值並更新?

這是我曾嘗試:

$xml = new DOMDocument("1.0", "ISO-8859-1"); 
$xml->formatOutput = true; 
$xml->preserveWhiteSpace = false; 
$xml->loadXML('<?xml version="1.0"?> 
<friends> 
    <friend id="1"> 
    <name>MyTest</name> 
    <games>5</games> 
    <wins>3</wins> 
    </friend> 
</friends>'); 

echo "<xmp>OLD:\n". $xml->saveXML() ."</xmp>"; 

$library = $xml->documentElement; 
$xpath = new DOMXPath($xml); 
$xpath2 = new DOMXPath($xml); 

$result = $xpath->query('//friend[@id="1"]/games'); 
if($result){ 

    $cgames = $xpath->query('//friend[@id="1"]/games')->item(0); 
    $cgames = $cgames->nodeValue; 
    $result->item(0)->nodeValue = $cgames+1; 

    $cwins = $xpath->query('//friend[@id="1"]/wins')->item(0); 
    $cwins = $cwins->nodeValue; 
    $result->item(0)->nodeValue = $cwins+1; 

    echo "<xmp>NEW:\n". $xml->saveXML() ."</xmp>"; 
} 

做這件事時,我只更新和新的價值將是4?它應該是6,應該是4 ...我做錯了什麼?

請幫忙在此先感謝:-)

回答

0

添加$result2,因爲你想在/games搜索

$result = $xpath->query('//friend[@id="1"]/games'); 
$result2 = $xpath->query('//friend[@id="1"]/wins'); 

if($result){ 
    $cgames = $result->item(0)->nodeValue; 
    $result->item(0)->nodeValue = $cgames+1; 
} 

if($result2){ 
    $cwins = $result2->item(0)->nodeValue; 
    $result2->item(0)->nodeValue = $cwins+1; 
} 

echo "<xmp>NEW:\n". $xml->saveXML() ."</xmp>"; 

更新/wins和刪除$xpath2 = new DOMXPath($xml);,你並不需要2 XPath小號

Codepad Example

+0

哦,是的......有沒有訣竅。不知道爲什麼我沒有想到這一點;-)非常感謝:-) – Mansa