2010-03-28 4 views
2
<wsdl:definitions targetNamespace="http://www.webserviceX.NET/"> 
<wsdl:types> 
<s:schema elementFormDefault="qualified" targetNamespace="http://www.webserviceX.NET/"> 
<s:element name="ConversionRate"> 
<s:complexType> 
<s:sequence> 
<s:element minOccurs="1" maxOccurs="1" name="FromCurrency" type="tns:Currency"/> 
<s:element minOccurs="1" maxOccurs="1" name="ToCurrency" type="tns:Currency"/> 
</s:sequence> 
</s:complexType> 
</s:element> 
<s:simpleType name="Currency"> 
<s:restriction base="s:string"> 
<s:enumeration value="AFA"/> 
<s:enumeration value="ALL"/> 
<s:enumeration value="DZD"/> 
<s:enumeration value="ARS"/> 

J'essaie d'obtenir tous les éléments de l'énumération, mais je n'arrive pas à le comprendre correctement. C'est le devoir donc s'il vous plaît pas de solutions complètes, juste des conseils si possible.Accéder aux éléments de ce fichier xml

$feed = simplexml_load_file('http://www.webservicex.net/CurrencyConvertor.asmx?WSDL'); 

foreach($feed->simpleType as $val){ 
    $ns s = $val->children('http://www.webserviceX.NET/'); 
    echo $ns_s -> enumeration; 
} 

Qu'est-ce que je fais mal?

grâce

+0

Juste un commentaire, vous avez deux variables différentes dans votre code posté, '$ ns s' et' $ ns_s' –

+0

désolé, faute de frappe, mais yeh encore le même numéro – csU

Répondre

3

Les travaux suivants avec PHP 5.2:

$feedUrl = 'http://www.webservicex.net/CurrencyConvertor.asmx?WSDL'; 
$feed = simplexml_load_file($feedUrl); 
$feed->registerXPathNamespace('s', 'http://www.w3.org/2001/XMLSchema'); 
foreach($feed->xpath('//s:enumeration/@value') as $enumNode) { 
    echo $enumNode, PHP_EOL; 
} 

print_r($feed->getDocNamespaces()); 

Une autre approche serait d'utiliser l'extension DOM:

$feed = new DomDocument; 
$feed->load('http://www.webservicex.net/CurrencyConvertor.asmx?WSDL'); 
$nodes = $feed->getElementsByTagNameNS(
    'http://www.w3.org/2001/XMLSchema', 
    'enumeration'); 

foreach($nodes as $node) { 
    echo $node->getAttribute('value'), PHP_EOL; 
} 
+0

Serait-il possible d'avoir un indice sur la façon de le faire comme altugh être un étudiant signifie que je ne connais pas d'autre moyen de le faire vraiment car je manque de l'expérience, et évidemment en utilisant ce qui précède serait classé comme la tricherie - et à juste titre: D – csU

+0

@csU bien, la première chose serait d'utiliser l'espace de noms correct. Les éléments s: enumaration se trouvent dans l'espace de noms XMLSchema. Donc, lorsque vous itérez les fils de l'alimentation, vous voulez vous limiter à ceux-ci. – Gordon

+0

XML est supérieur à l'espace de noms car il utilise un modèle d'héritage lambda, ce qui n'est pas compatible avec la portée orientée objet utilisée dans les langages basés sur les classes: C++, PHP, Java, etc. –

Questions connexes