#php #xml #simplexml
#php #xml #simplexml
Вопрос:
У меня есть три XML-файла, которые я хочу загрузить в свой php-файл с помощью функции simplexml_load_string .
Как я могу этого добиться?
@Jan-Henk:
Вот что я написал в комментариях:
Это то, что у меня есть на данный момент, он ищет один XML-файл для сотрудника Джейн:
$result = simplexml_load_file('employees1.xml');
echo "<strong>Matching employees with name 'Jane'</strong><br />";
$employees = $result->xpath('/employees/employee[name="Jane"]');
foreach($employees as $employee) {
echo "Found {$employee->name}<br />";
}
echo "<br />";
Как это будет выглядеть с тремя XML-файлами. А затем вместо поиска employee Jane, как указано выше. Он должен выполнить поиск дубликатов в трех файлах. Итак, если сотрудник указан два раза в любом из трех файлов. Он должен вернуть: «Найдено Джейн».
Комментарии:
1. Попробуйте преобразовать их в string, а затем объединить массивы.
Ответ №1:
Просто загрузите все 3 файла отдельно:
$xmlOne = simplexml_load_file('path/to/file1.xml');
$xmlTwo = simplexml_load_file('path/to/file2.xml');
$xmlThree = simplexml_load_file('path/to/file3.xml');
Если вы действительно хотите использовать simplexml_load_string вместо simplexml_load_file, вы можете сделать:
$xmlOne = simplexml_load_string(file_get_contents('path/to/file1.xml'));
Ответьте на редактирование в вашем вопросе, которое работает только для имени Jane:
$files = array('employees1.xml', 'employees2.xml', 'employees3.xml');
$xpathQuery = '/employees/employee[name="Jane"]';
$count = 0;
foreach ($files as $file) {
$xml = simplexml_load_file($file);
$result = $xml->xpath($xpathQuery);
if (count($result) > 0) {
$count ;
}
}
if ($count > 1) {
echo "Duplicates for Jane";
} else {
echo "No duplicates for Jane";
}
Комментарии:
1. Имеет ли значение, какой из них я использую, simplexml_load_string или simplexml_load_file? Файл php должен загрузить три XML-файла. А затем я использую это руководство для фильтрации результатов по ВСЕМ трем файлам.
2. simplexml_load_file делает все сразу, так что это просто проще. Что касается обработки всех трех файлов, вы можете просто выполнить код, который хотите запустить для всех трех переменных.
3. «Ответ на редактирование в вашем вопросе, которое работает только для имени Jane» — Как я могу заставить его работать со всеми дублированными. Он должен выполнить поиск по трем файлам, если будут найдены какие-либо дубликаты, он должен их отобразить. Найдены дубликаты….
4. Затем вы должны сначала извлечь все имена из трех XML-файлов, а затем использовать приведенный выше код в цикле для проверки каждого имени. Но я не собираюсь писать весь этот код за вас, вы должны приложить некоторые усилия самостоятельно.
5. Да, я буду, спасибо, что нашли время и помогли мне. Я новичок в этом. И я не хочу, чтобы вы писали весь этот код. Но не могли бы вы просто указать мне правильное направление, где или что я должен искать, чтобы научиться извлекать все имена из XML-файлов. Поэтому я могу использовать ваш код выше. Еще раз спасибо.