2012-03-03 2 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'? Где это было определено? –

+0

@Martin oh ... Я только что скопировал код откуда-то и использовал его, не могли бы вы показать, как его определить. Благодарю. – krishna

+0

, в каких случаях я могу получить эту ошибку и что может быть причиной этого – krishna

ответ

5

Вы должны изменить код, чтобы выглядеть следующим образом:

$team1sabbr = $dom->getElementsByTagName('team1sabbr'); 
$textNode = $dom->createTextNode('value-1'); 

foreach ($team1sabbr as $team) { 
    $team->parentNode->replaceChild($textNode, $team); 
} 
  1. перебирать каждый найденный элемент
  2. Найди родитель этого элемента
  3. Использования replaceChild на родительском узле.

Edit ::
через комментарии, кажется, вопрос был неясен.

Следующее что требуется.

$team1sabbr = $dom->getElementsByTagName('team1sabbr'); 

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

, что работает, но небольшая проблема оно приходит как ' стоимость 1 ' вместо ' стоимость 1 ', что без тегов его печать просто ребенок значение – krishna

+0

@BVKrishna: Это потому, что вы используя 'createTextNode', не уверен, чего вы ожидали. Вместо этого используйте 'createElement', если вы хотите использовать теги. Вопрос в том, что вы просто хотите заменить значение ** внутри ** teamsabbr1? Ore заменит весь элемент на Leigh

+0

Я только что внесли изменения в ваш котировочный код как 'createElement', и я получил' 'вместо' value-1 ' – krishna

2

$team1sabbr является DOMNodeList, то есть список Node s, не один Node. Вам нужно выбрать один из них.

+0

спасибо. не могли бы вы записать способ сделать это. Я поместил формат отображения 'cheat.xml'. – krishna

+0

@BVKrishna: если вы уверены, что будет только один экземпляр '', вы можете просто сделать '$ team1sabbr [0] -> ...'. –

+0

ya 'team1sabbr' имеет только один экземпляр, но у меня есть еще один экземпляр, который имеет два экземпляра. – krishna

Смежные вопросы