[PHP]xPath filter

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • rednasr
  • Registratie: Maart 2010
  • Laatst online: 12-02-2024
Ik heb bijvoorbeeld de volgende XML:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<xml>
    <item>
        <title>Only male</title>
        <genders>
            <gender>male</gender>
        </genders>
        <types>
            <type>bracelet</type>
        </types>
    </item>
    <item>
        <title>male and female</title>
        <genders>
            <gender>male</gender>
            <gender>female</gender>
        </genders>
        <types>
            <type>accessories</type>
        </types>
    </item>
</xml>


Nu wil ik met xPath filters gaan aanbrengen.

PHP:
1
2
$xml = simplexml_load_file('file.xml');
$path = '//*[gender[text()="Male" or text()="Female"]]/parent::item';


Dit werkt, hij haalt dan alle Male items op ÉN alle Female items.
Nu wil ik dus dat hij alleen items ophaalt die gender=Male && gender=Female zijn (dat zou dus in principe alleen het tweede item zijn).

PHP:
1
2
$xml = simplexml_load_file('file.xml');
$path = '//*[gender[text()="Male" and text()="Female"]]/parent::item';


Maar dan geeft hij geen resultaten. Wat doe ik hier nu fout?

[ Voor 2% gewijzigd door BtM909 op 15-10-2012 16:33 . Reden: code-language XML toegevoegd ]


Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 30-05 18:01
Je kan beter wat specifiekere node tests maken voor de duidelijkheid. Als je een item wilt hebben dus gewoon //item:

code:
1
//item[ genders/gender[text()='male'] and genders[gender[text()='female'] ] ]


Het probleem was dat je voor een enkele gender testte dat deze èn 'male' èn 'female' was. Je moet testen of er èn een gender 'male' is èn een gender 'female'.

Acties:
  • 0 Henk 'm!

  • rednasr
  • Registratie: Maart 2010
  • Laatst online: 12-02-2024
Thanks, dat is inderdaad wat ik zocht.
Het leven kan af en toe toch zo simpel zijn :)

Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 11:36
Nog even een tip met betrekking tot je XML/XPath, let wel erg op hoofdletters en kleine letters. Dat kan soms een wereld van verschil zijn :X.

Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 30-05 18:01
De expressie kan trouwens nog wat simpeler:
code:
1
//item[ genders/gender='male' and genders/gender='female' ]