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 ответ
Я собираюсь сделать несколько предположений здесь, так как я не мог сделать многое из вопроса.
- Вы хотите разобрать XML в php и вам нужен php код
- Вы хотите соответствовать
<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, Цвет: красный, Тип: Автомобиль
Таким образом, вы можете обнаружить повторяющиеся узлы между двумя файлами.