Удалите блоки строк XML на основе 1 тега, оставьте остальные - PullRequest
0 голосов
/ 26 октября 2018

У нас есть XML-файл, который выглядит примерно так:

<JOBS>
<JOB>
<STATE>VA</STATE>
<COUNTRY>United States</COUNTRY>
<EXTRA>Package</EXTRA>
</JOB>
</JOBS>

У нас есть несколько записей, половина из которых содержит тег EXTRA, а половина - нет.Мне нужно создать скрипт, который ищет между тегами, определяет, есть ли тег EXTRA, и, если нет, удаляет весь блок кода.Мы хотим сохранить только те из них, которые содержат тег EXTRA.

Звучит так, как будто это не составит труда, но я не знаю, с чего начать, поскольку у меня нет опыта программирования.Желательно, чтобы он был на PHP, у кого-нибудь есть какие-либо советы или рекомендации?

Любая помощь будет признательна

1 Ответ

0 голосов
/ 27 октября 2018

Если вы можете загрузить файл за один раз (так как файл не слишком большой), то использование SimpleXML позволяет быстро это сделать.Использование XPath для поиска заданий, у которых нет элемента <EXTRA >, может быть выполнено с использованием //JOB[not(EXTRA)], в котором просто говорится о любом элементе <JOB>, в котором нет элемента <EXTRA> непосредственно под ним.Затем удаляются все совпадающие узлы ...

$xml = simplexml_load_file("out.xml");   // Change this depending on your source of XML
$noExtra = $xml->xpath("//JOB[not(EXTRA)]");
foreach ( $noExtra as $job )   {
    unset($job[0]);
}

echo $xml->asXML();   // just to show new data
...