我可以在 php 的所有 xml 节点中使用str_replace吗?


can I use str_replace in all xml nodes with php?

我认为问题出在我的逻辑上,我可能走错了路。我想要的是

  • 使用 PHP
    打开 XML 文档
  • 按标签名称
    获取元素
  • 然后对于具有子节点的每个节点
  • 将每个字母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()调用,但它甚至不适用于一个。我这样做的方式是错误的还是我错过了什么?

$node变量在每次迭代时都会被覆盖,因此只有最后$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();