2013-12-01 2 views
0

Я думаю, что проблема связана с моей логикой, и я, вероятно, ошибаюсь. То, что я хочу, чтобыМожно ли использовать str_replace во всех узлах xml с php?

  • открыть документ XML с PHP
  • получить элементы по имени тега
  • затем для каждого узла, который имеет дочерние узлы
  • заменить каждую букву a с каждый b с и так далее.

вот код, который у меня есть, но он не работает.

xmlDoc=loadXMLDoc("temp/word/document.xml"); 
    $nodes = xmlDoc.getElementsByTagName("w:t"); 

     foreach ($nodes as $node) { 
      while($node->hasChildNodes()) { 
       $node = $node->childNodes->item(0); 
      } 
      $node->nodeValue = str_replace("a","ა",$node->nodeValue); 
      $node->nodeValue = str_replace("b","ბ",$node->nodeValue); 
      $node->nodeValue = str_replace("g","გ",$node->nodeValue); 
      $node->nodeValue = str_replace("d","დ",$node->nodeValue); 

      // More replacements for each letter in the alphabet. 
    } 

Я думал, что это может быть из-за нескольких str_replace() вызовов, но он не работает с даже только один. Неужели я об этом не ошибаюсь или что-то пропустил?

ответ

1

Переменная на каждой итерации перезаписывается, поэтому только последние $node будут модифицированы (если когда-либо). Вам нужно сделать замену внутри цикла, а затем использовать метод saveXML() для возврата измененной разметки XML.

Ваш код (с некоторыми усовершенствованиями):

$xmlDoc = new DOMDocument(); 
$xmlDoc->load('temp/word/document.xml'); 

foreach ($xmlDoc->getElementsByTagName("w:t") as $node) { 
    while($node->hasChildNodes()) { 
     $node = $node->childNodes->item(0); 
     $search = array('a', 'b', 'g', 'd'); 
     $replace = array('ა', 'ბ', 'გ', 'დ'); 
     $node->nodeValue = str_replace($search, $replace, $node->nodeValue); 
    } 
} 

echo $xmlDoc->saveXML(); 
+0

ааа это выглядит хорошо, так будет это по-прежнему применять замену к каждому ш: т теге – gcoulby

+0

@gcoulby: Да; почему бы вам не попробовать и не увидеть? –

+0

Мне пришлось покинуть дом. я вернусь через час, и я обновлю вас. и отметьте как правильно, как только он сработает, и я уверен, что он это сделает. – gcoulby

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