2012-03-03 130 views
1

請幫我與替換子節點替換子節點的值PHP的XML-DOM

$dom = new DOMDocument(); 
$dom->load('cheat.xml'); 
$team1sabbr = $dom->getElementsByTagName('team1sabbr'); 
$textNode = $dom->createTextNode('value-1'); 
$textNode = $dom->importNode($textNode, true); 
$team1sabbr->replaceChild($textNode, $oldNode); 
$dom->save('cheat.xml'); 

它扔像

Fatal error: Call to undefined method DOMNodeList::replaceChild() 

cheat.xml錯誤看起來像

理解問題
<?xml version="1.0"?> 
<matches> 

      <match id="2204"> 

    <Game></Game> 

     <team1sabbr></team1sabbr> 

     <team2sabbr></team2sabbr> 
+1

什麼是'$ oldNode'?它在哪裏定義? – 2012-03-03 08:23:36

+0

@Martin哦......我剛剛從某處複製了代碼並使用它,請問您能否展示如何定義它。謝謝。 – krishna 2012-03-03 08:34:01

+0

在這種情況下,我可能會收到此錯誤,以及 – krishna 2012-03-03 08:39:06

回答

5

您需要修改您的代碼如下所示:通過每個找到的元素

  • $team1sabbr = $dom->getElementsByTagName('team1sabbr'); 
    $textNode = $dom->createTextNode('value-1'); 
    
    foreach ($team1sabbr as $team) { 
        $team->parentNode->replaceChild($textNode, $team); 
    } 
    
    1. 迭代找到元素
    2. 父節點上使用replaceChild的父母。

    編輯::
    通過的意見,似乎問題是不清楚。

    以下是需要的。

    $team1sabbr = $dom->getElementsByTagName('team1sabbr'); 
    
    foreach ($team1sabbr as $team) { 
        $team->nodeValue = 'value-1'; 
    } 
    
  • +0

    的作品,但一個小問題就來了,比如' 值-1 ',而不是' 值-1 '這是沒有標籤的其打印只是孩子值 – krishna 2012-03-03 10:06:11

    +0

    @BVKrishna:那是因爲你使用'createTextNode',不知道你的期望。如果您需要標籤,請使用'createElement'。是否只是想替換** teamsabbr1中的值**?礦石 Leigh 2012-03-03 10:14:49

    +0

    更換整個部件我只是更改了引用代碼'createElement'和我得到的是''代替'值-1' – krishna 2012-03-03 10:19:33

    2

    $team1sabbrDOMNodeList,即列表Node s,而不是一個Node。你需要選擇其中的一個。

    +0

    謝謝背後的原因。你能否寫下這樣做的方式。我已經放置了'cheat.xml'的格式。 – krishna 2012-03-03 08:31:35

    +0

    @BVKrishna:如果您確定只有一個''的實例,您可以執行'$ team1sabbr [0] - > ...'。 – 2012-03-03 08:32:44

    +0

    雅'team1sabbr'僅僅是一個例子,但我其他一些具有兩個實例 – krishna 2012-03-03 08:35:49