0

私はxmlファイルを開いて配列として解析する方法を理解しようとしています。しかし、私はそれを適切に機能させることができないようです。XML ファイルは次のとおりです。

<RMSAvailRateChartRS Version="1.0.0.0">
  <SoldMessage>call</SoldMessage>
  <RoomTypes>
    <RoomType>
      <RoomTypeId>10</RoomTypeId>
      <SubPropertyId>1</SubPropertyId>
      <Name>K</Name>
      <MaxOccupancy>2</MaxOccupancy>
      <Availability Id="1" Date="2013-11-04" Available="false" NoOfRoomsAvailable="0" />
      <BookingRangeAvailable>false</BookingRangeAvailable>
      <ChargeTypes>
        <ChargeType>
          <ChargeTypeId>8</ChargeTypeId>
          <Name>BAR</Name>
          <Description>Best Rate Available</Description>
          <Charge Id="1" Date="2013-11-04" Price="100.00" MinStay="1" MaxStay="25" ValidCharge="true" IncludeChildInBase="false" IncludeInfantInBase="false" Flames="false" CanArriveToday="True" PersonBase="2" ChildBase="0" InfantBase="0" />
        </ChargeType>
      </ChargeTypes>
    </RoomType>
  </RoomTypes>
</RMSAvailRateChartRS>

これが私のphpコードです(配列として渡すため):

public static function getXML($id) {

        $file = JPATH_SITE.'/tmp/request-'.$id.'.xml';
        if (file_exists($file)) :
            $xml = simplexml_load_file($file,'SimpleXMLElement',LIBXML_NOCDATA);            
            return $xml;
        else :
            exit('Failed to open '.$file.'.');
        endif;

    }

これは機能し、次の配列が得られます。

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [Version] => 1.0.0.0
        )

    [SoldMessage] => call
    [RoomTypes] => SimpleXMLElement Object
        (
            [RoomType] => SimpleXMLElement Object
                (
                    [RoomTypeId] => 10
                    [SubPropertyId] => 1
                    [Name] => K
                    [MaxOccupancy] => 2
                    [Availability] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [Id] => 1
                                    [Date] => 2013-11-04
                                    [Available] => false
                                    [NoOfRoomsAvailable] => 0
                                )

                        )

                    [BookingRangeAvailable] => false
                    [ChargeTypes] => SimpleXMLElement Object
                        (
                            [ChargeType] => SimpleXMLElement Object
                                (
                                    [ChargeTypeId] => 8
                                    [Name] => BAR
                                    [Description] => Best Rate Available
                                    [Charge] => SimpleXMLElement Object
                                        (
                                            [@attributes] => Array
                                                (
                                                    [Id] => 1
                                                    [Date] => 2013-11-04
                                                    [Price] => 100.00
                                                    [MinStay] => 1
                                                    [MaxStay] => 25
                                                    [ValidCharge] => true
                                                    [IncludeChildInBase] => false
                                                    [IncludeInfantInBase] => false
                                                    [Flames] => false
                                                    [CanArriveToday] => True
                                                    [PersonBase] => 2
                                                    [ChildBase] => 0
                                                    [InfantBase] => 0
                                                )

                                        )

                                )

                        )

                )

        )

)

しかし、配列を実行して情報をエコーアウトしようとすると、失敗します。そのために使用しようとしているコードは次のとおりです。

foreach($xmlArr->RMSAvailRateChartRS[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
};

しかし、私が得ているエラーは次のとおりです:致命的なエラー: 行 33 の default.php の非オブジェクトでメンバー関数 attributes() への呼び出し

XMLファイルの詳細をエコーアウトするのを手伝ってくれませんか?

4

2 に答える 2

1

への変更:

foreach($xmlArr->attributes() as $a => $b) {
    echo $a."=".$b."\n";
}
于 2013-10-31T03:19:56.793 に答える