【问题标题】:How to rename xml's root node and remove it's child node using PHP - Beginner如何使用 PHP 重命名 xml 的根节点并删除它的子节点 - 初学者
【发布时间】:2014-01-21 09:32:33
【问题描述】:

这是 XML 文件:products.xml

<?xml version="1.0"?>
<TABLE-RECORDS>
<EXPORT-RECORDS>
<PRODUCT>
  <PRODUCTS_NAME>Name of product</PRODUCTS_NAME>
  <PRODUCTS_DESCRIPTION>Description of Product</PRODUCTS_DESCRIPTION>
  <PRODUCTS_IMAGE>any.jpg</PRODUCTS_IMAGE>
  <PRODUCTS_PRICE>1.00</PRODUCTS_PRICE>
  <PRODUCTS_MODEL>ANY</PRODUCTS_MODEL>
  <ITEM_BRANDNAME>ANY</ITEM_BRANDNAME>
  <ITEM_UPC>11111111</ITEM_UPC>
  <ITEM_HEIGHT>1.00</ITEM_HEIGHT>
  <ITEM_LENGTH>1.00</ITEM_LENGTH>
  <ITEM_DIAMETER>1.00</ITEM_DIAMETER>
  <PRODUCTS_WEIGHT>1.00</PRODUCTS_WEIGHT>
  <MANUFACTURERS_NAME>any manufacturer</MANUFACTURERS_NAME>
  <ITEM_VENDOR_NUMBER>Vendor</ITEM_VENDOR_NUMBER>
  <PRODUCTS_QUANTITY>1</PRODUCTS_QUANTITY>
  <DATE_RECIEVED>0000-00-00 00:00:00</DATE_RECIEVED>
  <PROP_PACKAGING>box</PROP_PACKAGING>
  <PRODUCT_CLASS>any class</PRODUCT_CLASS>
  <PRODUCTS_TYPE>any type</PRODUCTS_TYPE>
</PRODUCT>
</EXPORT-RECORDS>
</TABLE-RECORDS>

我想将“TABLE-RECORDS”更改为“PRODUCTS”并删除“EXPORT-RECORDS”标签。

我尝试过使用 SimpleXML,但我只能使用 getName() 检索标签的名称,而 DOMDocument 根本不适合我。

任何帮助/指导将不胜感激!

【问题讨论】:

  • 为什么不直接创建一个带有所需根节点的新 XML?结果是一样的,但要简单得多。
  • @ToBe -- 我需要自动化这个过程,因为它将是用于上传整个目录的 xml 文件。
  • @Þaw -- 我查看了提供的链接,但是它正在删除一个属性,我需要删除一个元素。如果我错了,请纠正我。
  • 我仍然没有看到你的问题。您想自动删除/更改其他根节点,还是想更改删除 XML 中的任何其他节点?如果它始终是 root,则始终只是创建一个新的。如果是别的东西,SimpleXMLElement 提供了简单的功能。

标签: php xml root


【解决方案1】:

如果您想将节点移动到另一个地方,您可能想尝试这些功能。 http://www.php.net/manual/de/class.domdocument.php

//Load your xml into a DomDocument
$dom= new DOMDocument(); 
$dom->loadXML($xml); 

// Get the node in question (probably within a loop and remove from source
// This sample is missing the loop part where you select/load the $node!
$node = $node->parentNode->removeChild($node);

// Now select your target node and then mov
$node = $targetNode->insertBefore($node);

您可以从那里开始工作并自己解决缺少的部分吗?

【讨论】:

  • 我不确定如何进行循环部分...但是,这里是让我获得前两个节点名称的代码,“TABLE-RECORDS”和“EXPORT-记录”。 $xml_file = 'products2.xml';$xmlobj = simplexml_load_file($xml_file);$first = $xmlobj-&gt;getName();foreach ($xmlobj-&gt;children() as $child) {echo 'sec: ' . $child-&gt;getName() . "\n";}$xmlobj-&gt;asXML($xml_file);
  • 这是我卡住的地方。 $first 有我想将其名称更改为 PRODUCTS 的 TABLE-RECORDS 并且 $child->getName() 有我需要删除的 EXPORT-RECORDS。
  • 您需要按顺序执行以下步骤: 1) 找到源节点“PRODUCT”。 2)遍历它的所有子节点并将它们移动到根节点“TABLE-RECORDS” 3)删除源节点 4)重命名根节点。我担心您将不得不学习使用 DomDocument 和 DomNode 类才能使其工作。
  • 好的,我会试一试告诉你...谢谢你的指导! :)
  • 这是我想出的:- 1 获取元素 -- $nodes = $dom-&gt;getElementsByTagName('TABLE-RECORDS'); 2- 遍历节点 foreach ($nodes as $node) { $newNode = $dom-&gt;createElement($new); --- 这是我卡住的地方我该如何移动它们? ?
猜你喜欢
  • 2011-02-09
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多