2010-03-28 51 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"/> 

我想在枚舉中的所有元素,但似乎無法得到正確的。這是作業,所以請不要提供完整的解決方案,只要有可能,請指導。訪問這個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; 
} 

我在做什麼錯?

感謝

+0

只是一個評論,您有兩個不同的變量您發佈的代碼,'$ ns s'和'$ ns_s' – 2010-03-28 15:27:04

+0

對不起,打字錯誤,但是你仍然是同一個問題 – csU 2010-03-28 15:34:56

回答

3

以下工程與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()); 

另一種方法是使用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

有沒有可能提示如何按照我的方式做到這一點發布工作代碼對我來說很有用,看看發生了什麼事情,作爲一名學生意味着我不知道有任何其他的做法,因爲我缺乏這方面的經驗,而且顯然使用上述方法將被視爲作弊行爲 - 理所當然地如此:D – csU 2010-03-28 15:56:38

+0

@csU,第一件事就是使用正確的名稱空間。 s:enumaration元素位於XMLSchema名稱空間內。因此,在迭代Feed Feed時,您想限制自己。 – Gordon 2010-03-28 16:05:54

+0

XML在名稱空間上更勝一籌,因爲它使用了一個lambda繼承模型,它與基於類的語言中使用的面向對象的作用域不兼容:C++,PHP,Java等等。 – 2010-03-28 16:13:46