脚本宝典收集整理的这篇文章主要介绍了每个parentNode都有PHP replaceChild,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
<?PHP $xml = " <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> <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> <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> "; 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; break; } foreach ($toRemove as $node) { $node->parentNode->removeChild($node); } $dom->formatOutput = TRUE; return $dom->saveXML(); } $xml = renaMetags($xml,'name','Source'); $xml = renaMetags($xml,'parentCategory'); $xml = renaMetags($xml,'Category'); $xml = renaMetags($xml,'subCategory'); $xml = renaMetags($xml,'sisterCategory'); echo $xml; ?>
但是,此代码仅替换并且仅适用于一个产品集.
我想我需要在函数中的某个地方调用foreach语句,该函数由foreach parentNode(‘product’)替换标记名称.我需要为函数添加什么来迭代所有产品集?
上面的代码将打印出这个:(注意第一组名称节点已经消失,并被指定的新节点替换)
<?xml version="1.0"?> <products> <product> <ItemId>531670</ItemId> <modelNumber>METRA ELECTRONICS/MOBILE AUdio</modelNumber> <Source>Buy</Source> <parentCategory>Car,Marine & GPS</parentCategory> <Category>Car Installation Parts</Category> <subCategory>Deck Installation Parts</subCategory> <sisterCategory>Antennas & Adapters</sisterCategory></product> <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>
如您所见,它只替换了一个产品实例.
首先,您必须遍历产品,然后通过产品的< name>节点.类似于以下内容:
function renaMetags($xml,$new) { $toRemove = array(); $dom = new DOMDocument(); $dom->loadXML($xml); $products = $dom->getElementsByTagName('product'); foreach($products as $product) { $nodes = $product->getElementsByTagName($old); 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; break; } } foreach ($toRemove as $node) { $node->parentNode->removeChild($node); } $dom->formatOutput = TRUE; return $dom->saveXML(); }
以上是脚本宝典为你收集整理的每个parentNode都有PHP replaceChild全部内容,希望文章能够帮你解决每个parentNode都有PHP replaceChild所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。