Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中按类别分离XML产品_Php_Json_Xml - Fatal编程技术网

在PHP中按类别分离XML产品

在PHP中按类别分离XML产品,php,json,xml,Php,Json,Xml,我通过 $xml=simplexml_load_file("./files/downloaded.xml"); 此文件包含许多不同类别的产品。 我想根据它们的类别将它们分开。 下面是下面代码显示的读取文件视图 print "<pre>"; print_r($xml); print "</pre>"; $baby_json = simplexml_load_string($baby); $json = json_encode($baby_json); file_put_

我通过

$xml=simplexml_load_file("./files/downloaded.xml");
此文件包含许多不同类别的产品。 我想根据它们的类别将它们分开。 下面是下面代码显示的读取文件视图

print "<pre>";
print_r($xml);
print "</pre>";
$baby_json = simplexml_load_string($baby);
$json = json_encode($baby_json);
file_put_contents("./files/foodcupobard.json",$json);
file_put_contents("./files/foodcupobard.xml",$baby);
但它在分离后不起作用。 这是分离前工作的代码

$products = $xml->xpath("/products/product[starts-with(category, 'Foo > Bar >')]");
它在分离后不工作的原因是分离后{$baby}变成了一个数组而不是SimpleXMLElement对象。有人能帮我把这些分开的产品保存到baby.xml和baby.json文件中吗?还是用php代码来分隔这些产品

任何帮助都将不胜感激!
谢谢:)

操作原始的
SimpleXml
对象,而不是创建数组。
然后使用
$XML->asXML($filename)另存为XML

使用
xpath
选择具有特定
节点<代码>xpath
类似于SQL for XML:

$products = $xml->xpath("/products/product[not(starts-with(category, 'Foo > Bar >'))]");

foreach ($products as $product)
    unset($product[0]);
评论:

  • 表达式将返回所有
    具有
    “Foo>条>”开头的
  • []
    附上一个条件
  • 您可以使用
    contains
    功能,而不是
    start with
代码示例:

echo $xml->asXML();
foreach ($products as $product) 
    $newxmlstr = $newxmlstr . $product->asXML();

$newxmlstr = "<products>" . $newxmlstr . "</products>";
但是
$products
是一个
SimpleXml
元素数组,但是没有
SimpleXml
对象,因此
asXML()
在这里不起作用

解决方案1:
  • 选择所需类别中所有
  • $xml
  • 使用
    asXML()保存
代码示例:

echo $xml->asXML();
foreach ($products as $product) 
    $newxmlstr = $newxmlstr . $product->asXML();

$newxmlstr = "<products>" . $newxmlstr . "</products>";
这是使用
取消设置
删除节点的自参考技术

显示被操纵的XML:

看到它工作了吗

解决方案2 使用原始的
$products
并从中构建一个新的XML字符串

foreach($products作为$product)
$newxmlstr=$newxmlstr$product->asXML();
$newxmlstr=”“$newxmlstr。"";
看到它工作了吗


我更喜欢解决方案1。字符串函数的XML操作有出错的风险。如果原始XML非常大,解决方案2可能会更快。

请编辑您的问题并键入XML的相关部分,而不是链接图像。外部服务器上的图像可能会在将来被删除,您的问题对其他开发人员将毫无用处。是的,请发布实际的xml或php输出。希望提供帮助,但这里没有可复制的示例。
echo $xml->asXML();
foreach ($products as $product) 
    $newxmlstr = $newxmlstr . $product->asXML();

$newxmlstr = "<products>" . $newxmlstr . "</products>";