php只追加5个子节点中的3个
发布时间:2020-12-13 16:22:56 所属栏目:PHP教程 来源:网络整理
导读:此代码仅附加5个名称节点中的3个.这是为什么? 这是原始的 XML: 它有5个名称节点. ?xml version='1.0'?productsproductitemId531670/itemIdmodelNumberMETRA ELECTRONICS/MOBILE AUDIO/modelNumbercategoryPathcategorynameBuy/name/categorycategorynameCa
此代码仅附加5个名称节点中的3个.这是为什么?
这是原始的 XML: 它有5个名称节点. <?xml version='1.0'?> <products> <product> <itemId>531670</itemId> <modelNumber>METRA ELECTRONICS/MOBILE AUDIO</modelNumber> <categoryPath> <category><name>Buy</name></category> <category><name>Car,Marine & GPS</name></category> <category><name>Car Installation Parts</name></category> <category><name>Deck Installation Parts</name></category> <category><name>Antennas & Adapters</name></category> </categoryPath> </product> </products> 然后运行这个PHP代码.禁止将所有名称节点附加到产品节点中. <?php // load up your XML $xml = new DOMDocument; $xml->load('book.xml'); // Find all elements you want to replace. Since your data is really simple,// you can do this without much ado. Otherwise you could read up on XPath. // See http://www.php.net/manual/en/class.domxpath.php //$elements = $xml->getElementsByTagName('category'); // WARNING: $elements is a "live" list -- it's going to reflect the structure // of the document even as we are modifying it! For this reason,it's // important to write the loop in a way that makes it work correctly in the // presence of such "live updates". foreach ($xml->getElementsByTagName('product') as $product ) { foreach($product->getElementsByTagName('name') as $name ) { $product->appendChild($name ); } $product->removeChild($xml->getElementsByTagName('categoryPath')->item(0)); } // final result: $result = $xml->saveXML(); echo $result; ?> 最终结果是这个,它只附加3个名称节点: <?xml version="1.0"?> <products> <product> <itemId>531670</itemId> <modelNumber>METRA ELECTRONICS/MOBILE AUDIO</modelNumber> <name>Buy</name> <name>Antennas & Adapters</name> <name>Car Installation Parts</name> </product> </products> 为什么它只附加3个名称节点? 解决方法
您可以在追加它们之前临时将名称元素添加到数组中,因为您实时修改了DOM. getElementsByTagName()生成的节点列表可能会随着您移动节点而改变(事实上,这似乎正在发生的事情).
<?php // load up your XML $xml = new DOMDocument; $xml->load('book.xml'); // Array to store them $append = array(); foreach ($xml->getElementsByTagName('product') as $product ) { foreach($product->getElementsByTagName('name') as $name ) { // Stick $name onto the array $append[] = $name; } // Now append all of them to product foreach ($append as $a) { $product->appendChild($a); } $product->removeChild($xml->getElementsByTagName('categoryPath')->item(0)); } // final result: $result = $xml->saveXML(); echo $result; ?> 输出,附加所有值: <?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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |