在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>";