XML Praser: обнаружение повторяющихся узлов

Я пытаюсь сделать универсальный простой XML для массива скриптов.

Идея состоит в том, чтобы определить, какие узлы повторяются, так что это имя тега, которое нужно зациклить.

Например

Фид 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>

Лента 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>

Таким образом, в ленте 1 тег для цикла - это автомобиль, а в ленте 2 - автомобиль.

Логика, которую я дошел до сих пор, заключается в том, что узлы, которые появляются последовательно, - это способ обнаружить это.

1 ответ

Я собираюсь сделать несколько предположений здесь, так как я не мог сделать многое из вопроса.

  1. Вы хотите разобрать XML в php и вам нужен php код
  2. Вы хотите соответствовать <car> пометить в первом XML-файле <vehicle> тег во втором XML-файле.

Исходя из вышеизложенного предположения, вот программа для него


$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."
"; } }

Выход будет:

Название:Ford, Цвет: синий, Тип:Pickup
Название: Nissan, Цвет: красный, Тип: Автомобиль

Таким образом, вы можете обнаружить повторяющиеся узлы между двумя файлами.

Другие вопросы по тегам