使用PHP进行XML解析/过滤

时间:2019-03-05 01:28:08

标签: php xml wordpress rss parsexml

我正在将RSS提要中的XML文件集成到我的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中的数据,每个位置的类型相同。我想保持动态变化,因此,如果添加了新的地点或新的工作类型,它仍然可以正常工作,并且目前可以正常运行,但是我结束了多次学习,所以我想知道是否有更好的方法来解决这个问题。 (我实际上并不需要代码,但是我想改进一下,所以只讨论想法就好了!)

提前感谢您的时间。

此致

0 个答案:

没有答案