Ik heb een tijdje terug een scriptje geschreven dat wat gegevens uit een XML replacet aan de hand van een <element>value</element> (aan de hand van een element value). Dat ging allemaal prima. Nu is er echter een aangepaste versie, met een ander pad naar het element, maar ik krijg het niet aan de praat 
Vroeger moest ik op g:id controleren, dat deed ik zo:
Nu moet ik echter op de <group_id> waarde controleren en vervangen.. Simpel dacht ik zo:
Maar hij belandt nooit in de tweede if(!empty($result))
Terwijl alles volledig hetzelfde is, behalve het pad en het element waar ik op moet checken. Heeft dit misschien te maken met 2 xmlns's in de <feed> tag? Lijkt me sterk, aangezien ik de URL gewoon opgeef. Alle voorbeelden die ik online kon vinden komen op hetzelfde neer, daarom werkt het bij de 'oude' feed in de 1e if wel. Waarom het dan niet in de tweede werkt snap ik dan weer totaal niet. Iemand enig idee?

XML:
1
2
3
4
5
6
7
8
9
10
11
12
| <feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0"> <entry> <g:id>23423423</g:id> <group_id>9589859</group_id> <g:image_link> <![CDATA[ http://website.com/oldimage.jpg ]]> </g:image_link> ........ </entry> ........... |
Vroeger moest ik op g:id controleren, dat deed ik zo:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| $data = @simplexml_load_file($this->externalUrl); if ($data !== false) { foreach ($this->replaces as $id => $replace) { $result = array(); $data->registerXPathNamespace('g', 'http://base.google.com/ns/1.0'); $result = $data->xpath('/rss/channel/item[g:id="' . $id . '"]'); if (!empty($result)) { $result[0]->image_link = $replace[0]; } } } |
Nu moet ik echter op de <group_id> waarde controleren en vervangen.. Simpel dacht ik zo:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| $data = @simplexml_load_file($this->externalUrl); if ($data !== false) { foreach ($this->replaces as $id => $replace) { $result = array(); $data->registerXPathNamespace('g', 'http://base.google.com/ns/1.0'); $result = $data->xpath('/rss/channel/item[g:id="' . $id . '"]'); if (!empty($result)) { $result[0]->image_link = $replace[0]; } else { $result = $data->xpath('/feed/entry[group_id="' . $id . '"]'); if (!empty($result)) { // Komt nooit in deze if terecht $result[0]->image_link = $replace[0]; } } } } |
Maar hij belandt nooit in de tweede if(!empty($result))
Terwijl alles volledig hetzelfde is, behalve het pad en het element waar ik op moet checken. Heeft dit misschien te maken met 2 xmlns's in de <feed> tag? Lijkt me sterk, aangezien ik de URL gewoon opgeef. Alle voorbeelden die ik online kon vinden komen op hetzelfde neer, daarom werkt het bij de 'oude' feed in de 1e if wel. Waarom het dan niet in de tweede werkt snap ik dan weer totaal niet. Iemand enig idee?