2014-11-15 4 views
0

У меня есть этот XML-файл:Написание тегов XML с SimpleXML

<?xml version="1.0"?> 
<products> 
<product> 
    ... some nodes 
</product> 

<product> 
    ... some nodes 
</product> 

<product> 
    ... some nodes 
</product> 
</products> 

И я написал этот PHP код:

<?php 
.... 
.... 
$xml=simplexml_load_file("myfile.xml") or die("Error: Cannot create object"); 

foreach ($xml->xpath("/products/product") as $prod) 
{ 
    $xmlname = $xml->addChild("name",$name); 
    $xmlid = $xml->addChild("id",$id); 
    $xmlprice = $xml->addChild("price",$price); 
} 
$xml->asXML ("result_file.xml"); 
?> 

Это работает, но не так как я хочу. Он создает файл «result_file.xml» с новыми узлами: $ name, $ id и $ price. Проблема заключается в том, что все эти узлы вставляются в конец файла XML, как это:

<?xml version="1.0"?> 
<products> 
<product> 
    ... some nodes 
</product> 

<product> 
    ... some nodes 
</product> 

<product> 
    ... some nodes 
</product> 
    <name>$name</name> 
    <id>$id</id> 
    <price>$price</price> 
    <name>$name</name> 
    <id>$id</id> 
    <price>$price</price> 
    <name>$name</name> 
    <id>$id</id> 
    <price>$price</price> 
</products> 

Но я хотел бы, чтобы вставить все эти узлы после узла продукта. Например, я хочу получить:

<?xml version="1.0"?> 
<products> 
<product> 
    <name>$name</name> 
    <id>$id</id> 
    <price>$price</price> 
    ... some nodes 
</product> 

<product> 
    <name>$name</name> 
    <id>$id</id> 
    <price>$price</price> 
    ... some nodes 
</product> 

<product> 
    <name>$name</name> 
    <id>$id</id> 
    <price>$price</price> 
    ... some nodes 
</product> 
</products> 

ответ

4

Я думаю, что проблема у вас возникли здесь в том, что вы добавляете ребенок XML-элементы в корне $ XML.

Глядя на ваш код, если вы измените следующее:

foreach ($xml->xpath("/products/product") as $prod) { 
    $xmlname = $prod->addChild("name",$name); 
    $xmlid = $prod->addChild("id",$id); 
    $xmlprice = $prod->addChild("price",$price); 
} 
$xml->asXML ("result_file.xml"); 

Это должно работать.

$ прод рассматривается как экземпляр каждого <product>

+0

Да, вы правы. – splunk

Смежные вопросы