2016-03-23 19 views
0

PHPで以下のばかばかしいXMLフィードを解析する必要があります。それは不動産会社のもので、「不動産タイプ」のノードを持っているとは思っていませんでした。代わりにアパート用の「マンション」ノード、住宅用の「ハウス」ノードなどがあります。私の問題は、 'bedrooms'、 'sub_type'などの情報を得るためにこれらのノードを使用します(これはオリジナルの非常に古いバージョンです)。PHPでこのXMLフィードを解析するにはどうすればよいですか?

<properties> 
<property> 
    <general_info> 
     <id>1</id> 
    </general_info> 
    <apartment> 
     <sub_type>1</sub_type> 
     <bedrooms>2</bedrooms> 
    </apartment> 
</property> 
<property> 
    <general_info> 
     <id>2</id> 
    </general_info> 
    <house> 
     <sub_type>3</sub_type> 
     <bedrooms>5</bedrooms> 
    </house> 
</property> 
<property> 
    <general_info> 
     <id>3</id> 
    </general_info> 
    <business> 
     <sub_type>6</sub_type> 
     <bedrooms>0</bedrooms> 
    </business> 
</property> 

私は 'グラブ' にフィードをsimplexml_load_fileを使用して要素の上にforeachループを実行しています。いくつかの研究の後、xpathのように見えますが、私はそれを働かせることはできません。

は、ここに私のコードの基礎です:

$xmlObject = simplexml_load_file($XML_FILE_NAME); 

foreach($xmlObject->property as $property) 
{ 

    // Get Property sub-type 
    $property_sub_types = $property->xpath('//sub_type'); 
    foreach($property_sub_types as $sub_type) 
    { 
     print_r($sub_type); // printing to screen for demo purposes 
    } 
} 

これは私が取得しています出力されます。誰もが正しい方向に私を指すことができれば正しい値が、代わりに1

SimpleXMLElement Object 
(
    [0] => 1 
) 
SimpleXMLElement Object 
(
    [0] => 3 
) 
SimpleXMLElement Object 
(
    [0] => 6 
) 
SimpleXMLElement Object 
(
    [0] => 1 
) 
SimpleXMLElement Object 
(
    [0] => 3 
) 
SimpleXMLElement Object 
(
    [0] => 6 
) 
SimpleXMLElement Object 
(
    [0] => 1 
) 
SimpleXMLElement Object 
(
    [0] => 3 
) 
SimpleXMLElement Object 
(
    [0] => 6 
) 

の3倍を示し、それははるかに高く評価されると思い。ああ、あなたが尋ねる前に、彼らにフィードをやり直すことはオプションではありません。

+1

正確な問題は何ですか? xpath式は結果を返していませんか? xmlに関連付けられたデフォルトの名前空間はありますか? –

+0

XMLに残念なことにデフォルト名前空間は含まれていません。 –

+0

@KeithHall私は、私が得ている出力で質問を更新しました。今はっきりしていることを願っています。 –

答えて

1

xpath //sub_typeは、ドキュメント全体のすべてのsub_type要素を選択します。
.//sub_type助けてください

+0

hr_117と@IMSoPのおかげで、同時に私の問題の答えが出てきたようです。その重要な点を追加することで私の問題が解決されます - ありがとうございました!!! –

1
Please find below code : 
Are you exactly want to like this? 


$xmlObject = simplexml_load_file("XML File Path"); 
//print_r($xmlObject); 
foreach($xmlObject->property as $property) 
{  
    foreach($property as $test){ 
     //print_r($test->sub_type); 
     echo "Bedrooms:-" .$test->bedrooms."&nbsp;&nbsp;&nbsp;"; 
     echo "Sub Type:".$test->sub_type; 
     //print_r($property->business->sub_type); 
     echo "</br>"; 
    } 
} 
+0

ありがとう@ gaurav-jariwala。これにより正しいデータが出力されますが、すべてのループの正しいデータに加えて、 "Bedrooms: - Sub Type:"も出力されます。どうすればこの問題を回避できますか? –

+0

xpahtは使用しませんが、実行する必要があります。 +1 –

関連する問題