[PHP / DOMXPath] Query vergelijkt geen attributen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Ik probeer op een zo makkelijk mogelijke manier alle namespaces uit een document te halen. Tot nu toe lijkt dit via XPath te gaan, in ieder geval.. als de query zou werken.

Ik heb de query als volgt opgesteld:
PHP:
1
2
3
4
5
6
7
$this->__query('
   //*[
      not(
         namespace-uri() = ./following-sibling::*/namespace-uri()
      )
   ]
')


Dit geeft me echter een foutmelding, de ./following-sibling::*/namespace-uri() lijkt niet te mogen. Gewoon ./following-sibling::* werkt wel, maar ik moet natuurlijk de namespace-uri hebben.

De melding is overigens niet erg helpend:
Warning: DOMXPath::query() [domxpath.query]: Invalid expression in [..]/http/service/index.php on line 465

Warning: DOMXPath::query() [domxpath.query]: Invalid expression in [..]/http/service/index.php on line 465
Ik heb op w3(+ schools), PHP manual en verschillende fora gekeken. Geen resultaat.

Is er iets mis met mijn syntax ofzo?

[ Voor 17% gewijzigd door r0bert op 28-07-2008 18:05 ]


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Het is gelukt door de nodeset als argument mee te geven:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$this->__query('
//*
   [
      not(
          namespace-uri() = namespace-uri(./following-sibling::*)
      ) 
      and 
      not(
         namespace-uri() = namespace-uri(./preceding-sibling::*)
      ) 
   ]
');


Edit:
Dit is toch een beter idee :P:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$this->__query('//*
            [
                not(
                    namespace-uri() = namespace-uri(./ancestor::*)
                    or 
                    namespace-uri() = namespace-uri(./descendant::*)
                    or 
                    namespace-uri() = namespace-uri(./preceding::*)
                    or 
                    namespace-uri() = namespace-uri(./following::*)
                )
            ]');


Wou eigenlijk een //*[. != self()] of //*[. != current()] maar dat wil niet werken, helaas.

[ Voor 56% gewijzigd door r0bert op 28-07-2008 19:13 ]