2016-10-18 1 views
0

In Anbetracht dieser XMLPHP Xpath zurückkehren Null Spiel

<?xml version="1.0" encoding="UTF-8"?> <Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:SAML:2.0:assertion http://docs.oasis-open.org/security/saml/v2.0/saml-schema-assertion-2.0.xsd" ID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc" IssueInstant="2009-09-09T00:46:02Z" Version="2.0"> <Subject> <NameID>8</NameID> </Subject> .... </Assertion>

PHP

$dom = new DOMDocument(); $ret = $dom->loadXML($data); $xp = new DOMXPath($dom); $node_list = $xp->query('/Assertion');

$node_list->length return 0 Element. Ich möchte das DOMEelement extrahieren, aber irgendwie hat es nicht funktioniert.

+1

es richtig Implementierung Unter der Annahme getan es notwendig ist, Namespaces angeben, wenn für Elemente –

+0

Welche Art suchen von Namespaces? Können Sie antworten, indem Sie ein Beispiel geben? Kann ich einen zufälligen Namensraum eingeben? –

Antwort

1

Wie auf die Kommentare von Sami Kuhmonen angegeben Sie die Namespaces registrieren müssen kann, hier ein Beispiel:

<?php 
$string= <<<XML 
<?xml version="1.0" encoding="UTF-8"?> 
<Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:SAML:2.0:assertion http://docs.oasis-open.org/security/saml/v2.0/saml-schema-assertion-2.0.xsd" ID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc" IssueInstant="2009-09-09T00:46:02Z" Version="2.0"> 
    <Subject> 
     <NameID>8</NameID> 
    </Subject> 
</Assertion> 
XML; 

$dom = new DOMDocument(); 
$dom->loadXML($string); 
$xp = new DOMXPath($dom); 

// registering the namespaces 
$xp->registerNamespace('a','urn:oasis:names:tc:SAML:2.0:assertion'); 
$xp->registerNamespace('b','http://www.w3.org/2001/XMLSchema-instance'); 

// using the prefix of the registered namespace in the xpath expression 
$node_list = $xp->query('/a:Assertion'); 

print $node_list->length 
?>