在php中编写xml文件的问题

时间:2014-07-16 09:32:39

标签: php xml simplexml

我编写了一个代码,其中我根据我现在拥有的一个xml文件的内容编写新的xml文件。 在我读取的xml文件中,有14个片段,每个片段有3-4个节点。在这种情况下,我必须右7个新的xml文件,每个文件包含来自第一个文件的2个片段。 因此,写入后的所有xml文件应该每个都有2个片段,当所有文件合并时,总共会有14个片段。

但代码没有给我正确的输出

以下是代码

<?php
$docOutput  = new DOMDocument("1.0");

$root = $docOutput ->createElement("data");
$docOutput ->appendChild($root);
if(!$xml=simplexml_load_file('xmlfile.xml')){
trigger_error('Error reading XML file',E_USER_ERROR);
}
$array1=array();
$x=0;
foreach($xml as $syn)
{

for($i=$x*2;$i<($x+1)*2;$i++)
{
//$array1[] = $syn->productId;
echo $i;
echo "<br />";
echo $syn->productId;
$id   = $docOutput ->createElement("PID");
$idText = $docOutput ->createTextNode($syn->productId);
$id->appendChild($idText);

$title   = $docOutput ->createElement("PNAME");
$titleText = $docOutput ->createTextNode($syn->productname);
$title->appendChild($titleText);


$book = $docOutput ->createElement("Product");
$book->appendChild($id);
$book->appendChild($title);

$root->appendChild($book);


}
$docOutput ->formatOutput = true;
echo "<xmp>". $docOutput ->saveXML() ."</xmp>";

$docOutput ->save("mybooks$x.xml") or die("Error");

$x++;

}
//echo count($array1, COUNT_RECURSIVE);
?>

以下是文件的一个片段,我正在阅读

<?xml version="1.0"?>
<data>
  <Product>
    <PID>SGLDN7XJ2FPZH8G8</PID>
    <PNAME>Miami Blues Aviator Sunglasses</PNAME>
  </Product>
</data>

我正在阅读的文件中有14个产品片段。写完后我应该得到7个文件,每个文件有两个片段。

请帮助纠正代码

1 个答案:

答案 0 :(得分:0)

您获得的问题在于读取/写入XML的代码较少,但更多的是使用基本的循环逻辑。

您可能真正想要的是在迭代产品节点时,向前移动迭代,以便将两个产品元素放在一起。这适用于 SimpleXMLIterator

$xml = simplexml_load_string($buffer, 'SimpleXMLIterator');

foreach ($xml as $product) {

    // output current element
    printf("-+-%s\n", $product->asXML());

    // move to next element
    $xml->next();
    $product = $xml->current();

    // output next element
    printf(" \- %s\n\n", $product->asXML());
}

使用此XML输入:

<?xml version="1.0"?>
<data>
  <Product>1</Product>
  <Product>2</Product>
  <Product>3</Product>
  <Product>4</Product>
</data>

示例输出:

-+-<Product>1</Product>
 \- <Product>2</Product>

-+-<Product>3</Product>
 \- <Product>4</Product>

在线演示:https://eval.in/172918