我通过
读取PHP中的XML文件$xml=simplexml_load_file("./files/downloaded.xml");
此文件包含许多具有不同类别的产品。 我想根据他们的类别将它们分开。 以下是代码的读取文件视图外观。
print "<pre>";
print_r($xml);
print "</pre>";
我通过以下代码分隔产品
$baby = array();
for($x=0;$x < count($xml->product); $x++)
{
if( preg_match("#Groceries > ([ a-zA-Z0-9]+) >#i",$xml->product[$x]->category,$match) )
{
$match[1] = str_replace(" ", "" , strtolower($match[1]) );
if($match[1] == "baby"){
$baby[] = $xml->product[$x];
}
}
}
它已在一个名为$ baby的数组中分隔,这里是以下代码的婴儿数组视图
print "<pre>";
print_r($baby);
print "</pre>";
现在我想把它保存为baby.xml和baby.json文件,但我不知道如何保存它。 我试过这段代码来保存这些文件
$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);
但分离后它无法正常工作。 这是在分离之前工作的代码
$xml=simplexml_load_file("./files/downloaded.xml");
$xml_json = simplexml_load_string($xml);
$json = json_encode($xml_json);
file_put_contents("./files/baby.json",$json);
file_put_contents("./files/baby.xml",$xml);
分离后不工作的原因是分离后{$ baby}成为数组而不是SimpleXMLElement对象。任何人都可以帮我将这些分离的产品保存到baby.xml和baby.json文件中吗?或用PHP代码分隔这些产品的任何其他方式?
任何帮助将不胜感激! 谢谢:))
答案 0 :(得分:1)
操纵原始SimpleXml
对象,而不是创建数组
然后使用$xml->asXML($filename);
使用xpath
选择具有特定<product>
的{{1}}个节点。 <category>
就像SQL for XML:
xpath
评论:
/products/product[starts-with(category, 'Foo > Bar >')]
以<product>
开头的所有<category>
"Foo > Bar >"
附上条件。 []
功能代替contains
代码示例:
start-with
但是 $products = $xml->xpath("/products/product[starts-with(category, 'Foo > Bar >')]");
是$products
个元素的数组,但没有SimpleXml
个对象,所以SimpleXml
在这里不起作用。
asXML()
的所有<product>
NOT
$xml
代码示例:
asXML()
这是使用$products = $xml->xpath("/products/product[not(starts-with(category, 'Foo > Bar >'))]");
foreach ($products as $product)
unset($product[0]);
删除节点的自引用技术。
显示被操纵的XML:
unset
看到它有效:https://eval.in/512140
使用原始echo $xml->asXML();
并从中构建新的XML字符串。
$products
看到它有效:https://eval.in/512153
我更喜欢解决方案1.字符串函数的XML操作存在错误风险。如果原始XML非常大,那么解决方案2可能会更快。