使用Dom操作XML

时间:2014-06-03 17:11:33

标签: php xml dom

我试图通过添加一些自定义标记来操纵xml。

我设法在其上添加了一个自定义元素和一个TextNode,但它在XML的最底部呈现。

如何将此自定义标记添加为另一个标记的子标记?我尝试使用以下代码:

$product_record = $xml->documentElement->getElementsByTagName('product_record');

然后

$text = $test->appendChild($product_record);

但它似乎没有起作用。

在这里我被卡住了: http://viper-7.com/CsRNHU

如何在product_record中呈现测试标记?

谢谢, Thales公司

1 个答案:

答案 0 :(得分:0)

以完整示例为例,将新元素添加到文档itselt,而不是已获取的节点。

getElementsByTagName()方法返回节点列表,而不是单个节点,因此您需要使用循环或从列表中获取特定元素。

$xml = new DOMDocument();
$xml->load($url);

$products = $xml->documentElement->getElementsByTagName('product_record');

foreach ($products as $product) {
  $test = $product
      ->appendChild($xml->createElement('test'))
      ->appendChild($xml->createTextNode("testing"));
}

echo $xml->saveXML();

DOMDocument :: create *()方法创建特定节点并返回它们。 appendChild()方法将其添加到父节点并返回添加的节点。

您的示例返回UTF-16编码的XML。如果要更改编码,请将其导入UTF-8 XML文档:

$utf8 = new DOMDocument('1.0', 'UTF-8');
$utf8->appendChild($utf8->importNode($xml->documentElement, TRUE));

演示:http://viper-7.com/1eCPeo