我编写了一个代码,其中我根据我现在拥有的一个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个文件,每个文件有两个片段。
请帮助纠正代码
答案 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>