XML Parser:检测重复节点

时间:2013-07-23 22:41:59

标签: php xml xml-parsing

我正在尝试将通用的简单XML格式化为数组类型的脚本。

我们的想法是检测哪些节点正在重复,这就是我需要循环的标签名称

例如

Feed 1: -

<carfeed>
<sometag>
<child>
Child content
</child>
</sometag>
<cars>
<car>
<name>Ford</name>
<color>Blue</color>
</car>
<car>
<name>Nissan</name>
<color>Red</color>
</car>
</cars>
</carfeed>

Feed 2: -

<vehicles>
<vehicle>
<name>Ford</name>
<color>Blue</color>
<type>Pickup</type>
</vehicle>
<vehicle>
<name>Nissan</name>
<color>Red</color>
<type>Car</type>
</vehicle>
</vehicles>

因此,在Feed 1中,循环的标签是car,而Feed 2则是车辆。

到目前为止我提出的逻辑是连续循环的节点是否有办法检测到这一点。

1 个答案:

答案 0 :(得分:0)

我将在这里做一些假设,因为我无法从这个问题中做出太多贡献。

  1. 你想在php中解析XML并需要php代码
  2. 您希望将第一个xml文件中的<car>标记与第二个xml文件中的<vehicle>标记相匹配。
  3. 基于上述假设,这是程序

    
    $xml1 = simplexml_load_string($xmlData1,null, LIBXML_NOERROR | LIBXML_NOWARNING); //$xmlData1 is the first xml 
    $carsArr = array();
    foreach ($xml1->cars->car as $car) {
        $carsArr[(string)$car->name] = array();
        $carsArr[(string)$car->name]= (string)$car->color; //create map of car name to color
    }
    
    
    $xml2 = simplexml_load_string($$xmlData2,null, LIBXML_NOERROR | LIBXML_NOWARNING); //$xmlData2 is the second xml
    foreach($xml2->vehicle as $vehicle) {
        $name = (string)$vehicle->name;
        if(isset($carsArr[$name])) {
            echo "Name:".$name.",Color:".$carsArr[$name].",Type:".$vehicle->type."
    "; } }

    输出将是:

      

    名称:福特,颜色:蓝色,类型:皮卡
    名称:日产,颜色:红色,类型:汽车

    通过这种方式,您可以检测两个文件之间的重复节点。