我有當前具有相同名稱4個節點的XML文件的1個節點: 文件看起來是這樣的:(data.xml中)PHP只替換了一系列
<?xml version="1.0"?>
<products>
<product>
<ItemId>531670</ItemId>
<modelNumber>METRA ELECTRONICS/MOBILE AUDIO</modelNumber>
<name>Buy</name>
<name>Car, Marine & GPS</name>
<name>Car Installation Parts</name>
<name>Deck Installation Parts</name>
<name>Antennas & Adapters</name>
</product>
</products>
有4個節點同名。 (名稱節點)。
然後我用這個PHP代碼替換節點名稱
<?php
/**
* @param $xml string Your XML
* @param $old string Name of the old tag
* @param $new string Name of the new tag
* @return string New XML
*/
function renameTags($xml, $old, $new)
{
$dom = new DOMDocument();
$dom->loadXML($xml);
$nodes = $dom->getElementsByTagName($old);
$toRemove = array();
foreach ($nodes as $node)
{
$newNode = $dom->createElement($new);
foreach ($node->attributes as $attribute)
{
$newNode->setAttribute($attribute->name, $attribute->value);
}
foreach ($node->childNodes as $child)
{
$newNode->appendChild($node->removeChild($child));
}
$node->parentNode->appendChild($newNode);
$toRemove[] = $node;
}
foreach ($toRemove as $node)
{
$node->parentNode->removeChild($node);
}
return $dom->saveXML();
}
// Load XML from file data.xml
$xml = file_get_contents('data.xml');
$xml = renameTags($xml, 'name', 'newName');
echo $xml;
?>
此函數替換所有了newName的名字節點;但是,我只想替換名稱標記的一個實例,因爲我想重命名每個名稱標記。 如果我打電話給另一個 $ xml = renameTags($ xml,'name','newName2');
它不會工作,它只會使用$ xml的第一個實例。
任何想法如何我可以更改我的代碼,以允許我單獨替換每個名稱節點?
哈哈你這裏早些時候... :) – rdlowrey
我是。這個網站真的有助於理解事情。 – Ben
檢查更新的代碼。 – rdlowrey