Синтаксический анализ / фильтрация XML с помощью PHP - PullRequest
0 голосов
/ 05 марта 2019

Я интегрирую XML-файл из RSS-канала в одну из моих страниц WordPress.Файл выглядит примерно так:

<jobs>
  <job>
    <jobId>1</jobId>
    <jobTitle>Title #1</jobTitle>
    <jobType>Permanent</jobType>
    <jobPlace>Place #1</jobPlace>
 </job>
 <job>
    <jobId>2</jobId>
    <jobTitle>Title #2</jobTitle>
    <jobType>Part Time</jobType>
    <jobPlace>Place #2</jobPlace>
 </job>
 <job>
    <jobId>3</jobId>
    <jobTitle>Title #3</jobTitle>
    <jobType>Part Time</jobType>
    <jobPlace>Place #1</jobPlace>
 </job>
</jobs>

Так что это должно быть довольно просто, верно?Я использовал следующее для извлечения и отображения информации:

$xml = simplexml_load_file($url);
$items = json_decode(json_encode($xml), true);
$items = $items['job'];
$types = array();
$locations = array();
foreach($items as $value) {
    if(!isset($new_items[$value['jobPlace']])) {
        $location[$value['jobPlace']] =  $value['jobPlace'];
    }
    if(!isset($type[$value['jobType']])) {
        $type[$value['jobType']] =  $value['jobType'];
    }
}
$locations = array_values($location);
$types = array_values($type);
foreach($locations as $loc) {
    echo '<div class="jobs-'. $loc->jobPlace .'">';
    echo '<h1>Jobs in '. $loc->jobPlace .'</h1>';
    foreach($types as $typ) {
        $location = $xml->xpath('/jobs/job[jobPlace="'. $loc->jobPlace.'"][jobType="'. $typ .'"]');
        if($location) {
            echo '<h3>'.  $typ .'</h1>';
        }
        foreach($location as $item) {
            echo '<div class="job-offer">';
            echo $item->jobTitle;
            echo '</div>';
        }
    }
    echo '</div>';
    echo '</br>';
}

Результат примерно такой:

LOCATION #1:
Permanent Position
Actual job post(1)
...

Part Time Position:
Actual job post(3)
...

LOCATION #2:
Permanent Position
Actual job post(2)
...

Мне нужно, чтобы посты были разделены по местоположению, но в пределах местоположения, которое янужно сгруппировать по типу, я сначала создал два массива, которые собирали бы информацию о местоположении, мне просто нужно было отфильтровать уникальные значения, а затем я бы использовал «XPath» для «фильтрации» данных в XML, то же самое с типами длякаждое место.Я хотел, чтобы он был динамичным, поэтому, если добавляются новые местоположения или новые типы заданий, он все равно должен работать, и в настоящее время это работает нормально, но я прекратил использовать несколько foreach, и мне интересно, есть ли лучший способ решить эту проблему.(Мне действительно не нужен код, но я хотел бы улучшить его, поэтому было бы здорово просто обсудить идеи!)

Заранее спасибо за ваше время.

С уважением,

...