2011-07-28 9 views
0

私は配列に入れたいPHPのxml文字列を持っています。 ttt:treeとttt:simple xmlを使って車を取得するにはどうすればよいですか?シンプルなXML名前空間のないノードを読み取る方法は?

<?xmlversion="1.0"encoding="utf-8"?> 
<soap:Envelope xmlns:soap="htp://schemas.xmlsoap.org/soap/envelope/"xmlns:xsi="htp://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="htp://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<a xmlns="www.ttt.com"> 
<b xmlns:ttt="www.ttt.com"> 
<ttt:tree>big</ttt:tree> 
<ttt:car>small</ttt:car> 
</b> 
</a> 
</soap:Body> 
</soap:Envelope> 
+0

あなたはそれを試してみましたか?あなたのエラーはどこですか? – cweiske

+0

前回(PHP 5.2.6のどこかで)チェックしましたが、SimpleXMLはXMLの名前空間をサポートしていませんでした。答えは 'あなたはありません'です。代わりにXMLReaderクラスを使用してください。 – Mchl

+0

@Mchl:何? SimpleXMLは、その誕生以来、(名前の基本を)扱うことができます。 – Wrikken

答えて

1
$simpleXML = new SimpleXMLElement($x); 
//the hard way 
foreach($simpleXML->children('soap',true) 
       ->children('www.ttt.com') 
       ->children('www.ttt.com') 
       ->children('www.ttt.com') as $nodename => $nodevalue){ 
     echo $nodename.':'.$nodevalue.PHP_EOL; 
} 
//or direct: 

echo $simpleXML->children('soap',true) 
       ->children('www.ttt.com') 
       ->children('www.ttt.com') 
       ->children('www.ttt.com')->tree; 

//the less hard way 
$simpleXML->registerXPathNamespace('wantthisone','www.ttt.com'); 
$trees = $simpleXML->xpath('//wantthisone:tree'); 
echo $trees[0]; 
$cars = $simpleXML->xpath('//wantthisone:car'); 
echo $cars[0]; 
関連する問題