Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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_Xml - Fatal编程技术网

用PHP解析复杂xml

用PHP解析复杂xml,php,xml,Php,Xml,我有一个结构如下的xml文件: <categories> <category> <id></id> <name></name> </category> ... </categories> <products> <product> <id></id> <name></name> </pro

我有一个结构如下的xml文件:

<categories>
 <category>
   <id></id>
   <name></name>
 </category>
   ...
</categories>
<products>
 <product>
   <id></id>
   <name></name>
 </product>
   ...
</products>
<params>
 <param>
   <id></id>
   <name></name>
 </param>
   ...
</params>
<product_params>
 <product_param>
   <param_id></param_id>
   <product_id></product_id>
 </product_param>
   ...
</product_params>
$xml = simplexml_load_file('file.xml');
$products = $xml->products;
$product_params = $xml->product_params->product_param;

foreach ($products->product as $product) {

   echo '<p>'.$product->name.'</p>';

 for($i=0; $i < count($product_params) ;$i++) {

    if($product->id == $product_params[$i]->product_id) {

    }
 }

 }

...
...
...
...
如何显示产品节点、正确的类别(与id匹配)以及该产品的所有参数

我试过这样做:

<categories>
 <category>
   <id></id>
   <name></name>
 </category>
   ...
</categories>
<products>
 <product>
   <id></id>
   <name></name>
 </product>
   ...
</products>
<params>
 <param>
   <id></id>
   <name></name>
 </param>
   ...
</params>
<product_params>
 <product_param>
   <param_id></param_id>
   <product_id></product_id>
 </product_param>
   ...
</product_params>
$xml = simplexml_load_file('file.xml');
$products = $xml->products;
$product_params = $xml->product_params->product_param;

foreach ($products->product as $product) {

   echo '<p>'.$product->name.'</p>';

 for($i=0; $i < count($product_params) ;$i++) {

    if($product->id == $product_params[$i]->product_id) {

    }
 }

 }
$xml=simplexml\u load\u文件('file.xml');
$products=$xml->products;
$product_params=$xml->product_params->product_param;
foreach($products->product as$product){
回显“”.$product->name.“

”; 对于($i=0;$iid==$product\U参数[$i]->product\U id){ } } }

文件太大,脚本崩溃。再加上我的“解决方案”,我需要至少多嵌套一个循环。

a.1)解析和反规范化结构,以便更容易/更快地搜索可能存在重复数据的循环。a、 2)解析推送到数据库使用数据库进行搜索。b) 尝试使用xpath要求可能会有所帮助,但这取决于文件大小。我们谈论的XML有多大?文件大约有700MB。我会把它推到DB。ID如何匹配?更好的是,你能提供想要的结果吗?我会推到DB。应该快点。谢谢你的帮助。