XML跳过'错误'事件类型

时间:2015-04-18 00:42:01

标签: php xml

我有一个BLOATED XML文件,我用它来生成一个图库,其中包含一些关于图片的信息。除了Actual needed NEW之外,还有大量的OLD条目,添加更多图片,但也创建了重复的条目。

<result>
<event>
  <date>2015-04-14T22:19:02+02:00</date>
  <type>OLD</type>
  <value1>AAA</value1>
  <id>changingIDwhatever</id>
  <profile>
    <url>/domainpart/SPECIFICNAME/?w=</url>
    <name>SPECIFICNAME</name>
    <value2>BBB</value2>
    <value3>CCC</value3>
    <value4>DDD</value4>
      <image>
        <url>http://domain.tld/path/to/the/image/320.jpg?1234-ab1cd2e345fg6789</url>
        <width>320</width>
      </image>
  </profile>
</event>
<event>
  <date>2015-04-14T22:19:02+02:00</date>
  <type>NEW</type>
  <value1>AAA</value1>
  <id>changingIDwhatever</id>
  <profile>
    <url>/domainpart/ANOTHERNAME/?w=</url>
    <name>ANOTHERNAME</name>
    <value2>BBB</value2>
    <value3>CCC</value3>
    <value4>DDD</value4>
      <image>
        <url>http://domain.tld/path/to/the/image/320.jpg?1234-ab1cd2e345fg6789</url>
        <width>320</width>
      </image>
  </profile>
</event>
<event>
  <date>2015-04-14T22:19:02+02:00</date>
  <type>NEW</type>
  <value1>AAA</value1>
  <id>changingIDwhatever</id>
  <profile>
    <url>/domainpart/SPECIFICNAME/?w=</url>
    <name>SPECIFICNAME</name>
    <value2>BBB</value2>
    <value3>CCC</value3>
    <value4>DDD</value4>
      <image>
        <url>http://domain.tld/path/to/the/image/320.jpg?1234-ab1cd2e345fg6789</url>
        <width>320</width>
      </image>
  </profile>
</event>
</result>

我确实以非常基本的方式生成了一个非常简洁的布局。因为我对php完全没有任何了解,所以我通常基于skriptpieces,我发现它们的结合方式主要是我需要的结果。

<?php
//###################Config Start#########################
$memberid = "123456";
$maxAnzahl = 50;
$zaehler = 0;
$baseURL = "http://www.domain.tld";
//###################Config End#########################
$feed = simplexml_load_file('http://key:keypass@www.domain.tld/news/xml');
$events = $feed->events;
foreach ($events->event as $event) {
echo "<div class='4u'>";
echo "<article class='box style2'>";
if ($event->type == "newMember") {
echo "<a href='".$baseURL.$event->profile->url.$memberid."' class='image featured' target='_blank'><img src='" . $event->profile->image->url . "' alt='' /> </a>";
} else {
echo "<a href='".$baseURL.$event->profile->url.$memberid."' class='image featured' target='_blank'><img src='" . $event->image->url . "' alt='' /> </a>";
}
echo "<h3><a href='".$baseURL.$event->profile->url.$memberid."'>" . $event->profile->name . "</a></h3>";
echo "</article>";
echo "</div>";
$zaehler = $zaehler + 1;
if ($zaehler == $maxAnzahl) {
break;
}
}
?>

有人能够告诉我如何在那个skript中如何指定如何跳过所有OLD?

亲切的问候 Caylean

3 个答案:

答案 0 :(得分:1)

我自己找到了解决方案叹息我对此视而不见,直到我收到第一个回复,再次检查我的问题并看到一个标记,我通常想改变它到处使它清除什么我需要。

在我最初的问题中,有一行“ if($ event-&gt; type ==”newMember“){”通常情况下,我必须将其更改为“NEW”,如我的示例所示,帮助那些想要帮助的人,看看它更容易......好吧,现在我看到了它,它让我一切都清楚了。

更改代码如:

<?php
//###################Config Start#########################
$memberid = "123456";
$maxAnzahl = 50;
$zaehler = 0;
$baseURL = "http://www.domain.tld";
//###################Config End#########################
$feed = simplexml_load_file('http://key:keypass@www.domain.tld/news/xml');
$events = $feed->events;
foreach ($events->event as $event) {
if ($event->type == "NEW") {
echo "<div class='4u'>";
echo "<article class='box style2'>";
echo "<a href='".$baseURL.$event->profile->url.$memberid."' class='image featured' target='_blank'><img src='" . $event->profile->image->url . "' alt='' /> </a>";
echo "<h3><a href='".$baseURL.$event->profile->url.$memberid."'>" . $event->profile->name . "</a></h3>";
echo "</article>";
echo "</div>";
} else {
echo "";
}
$zaehler = $zaehler + 1;
if ($zaehler == $maxAnzahl) {
break;
}
}
?>

完全给我我正在寻找的图像和内容。出于某种原因,我已经在代码中找到了解决方案,但它却以某种方式搞砸了。

无论如何,谢谢你的帮助和想法!

答案 1 :(得分:0)

对于像查询XML结构这样的任务,我更喜欢使用XPATH.

试试这样。我希望能为你效劳。

<?php
    // Get the XML
    //###################Config Start#########################
    $memberid = "123456";
    $maxAnzahl = 50;
    $zaehler = 0;
    $baseURL = "http://www.domain.tld";
    //###################Config End#########################
    $source = file_get_contents('http://key:keypass@www.domain.tld/news/xml');

    // DOM document Creation
    $doc = new DOMDocument;
    $doc->loadXML($source);

    // DOM XPath Creation
    $xpath = new DOMXPath($doc);

    // Get all NEW events ONLY
    $events = $xpath->query('//result/event[text()="NEW"]');

    // Count number of events
    printf('There is %d events<br />', $events->length);

    // List all events
    for($i = 0; $i < ($events->length); $i++) {
        $event = $events->item($i);
    }
?>

答案 2 :(得分:0)

  

有人能够告诉我如何在那个skript中如何指定如何跳过所有OLD?

您可以在foreach循环的开头引入一个条件,检查是否要跳过(过滤掉)实际的$event条目,如果是,请跳到循环中的下一个条目:< / p>

foreach ($events->event as $event) {
    $skip = $event->type != 'NEW';
    if ($skip) {
        continue;
    }
    ...

请参阅continue(及其姐妹break)来控制PHP中的循环结构。