如何从PHP中获取XML文件的值?

时间:2017-05-07 07:48:34

标签: php mysql xml database

这是我的xml代码

<Hotelobjekt xmlns="http://www.dcs-caesar.de/hoteldaten" CRSSperre="false" Buchungssperre="false">
      <Hotelcode>AYTBLK0038</Hotelcode>
      <Hotelname>LIMAK ATLANTIS DE LUXE HOTEL &amp;amp; RESORT</Hotelname>    
    <Saisondefinition Saisonkuerzel="W16" DatumVon="2016-11-01" DatumBis="2017-04-06">
        <Saisonzeit Nummer="1">
          <Zeitraum DatumVon="2016-11-01" DatumBis="2016-11-18"/>
          <Zeitraum DatumVon="2016-12-25" DatumBis="2016-12-31"/>
        </Saisonzeit>
        <Saisonzeit Nummer="2">
          <Zeitraum DatumVon="2017-01-01" DatumBis="2017-03-06"/>
          <Zeitraum DatumVon="2016-11-19" DatumBis="2016-12-24"/>
        </Saisonzeit>
        <Saisonzeit Nummer="3">
          <Zeitraum DatumVon="2017-03-07" DatumBis="2017-04-06"/>
        </Saisonzeit>
      </Saisondefinition>
    </Hotelobjekt>



$items = simplexml_load_file($url);
print_r($items); // it's okey works

数组输出;

  

SimpleXMLElement Object([@attributes] =&gt; Array([CRSSperre] =&gt;   false [Buchungssperre] =&gt; false)[酒店代码] =&gt; AYTBLK0038   [酒店名称] =&gt; LIMAK ATLANTIS DE LUXE HOTEL&amp;采取   [Saisondefinition] =&gt; SimpleXMLElement对象([@attributes] =&gt;数组   ([Saisonkuerzel] =&gt; W16 [DatumVon] =&gt; 2016-11-01 [DatumBis] =&gt;   2017-04-06)[Saisonzeit] =&gt;数组([0] =&gt; SimpleXMLElement对象(   [@attributes] =&gt;阵列([Nummer] =&gt; 1)[Zeitraum] =&gt;数组([0] =&gt;   SimpleXMLElement对象([@attributes] =&gt;数组([DatumVon] =&gt;   2016-11-01 [DatumBis] =&gt; 2016-11-18))[1] =&gt; SimpleXMLElement对象   ([@attributes] =&gt;数组([DatumVon] =&gt; 2016-12-25 [DatumBis] =&gt;   2016-12-31))))[1] =&gt; SimpleXMLElement对象([@attributes] =&gt;   阵列([Nummer] =&gt; 2)[Zeitraum] =&gt;数组([0] =&gt; SimpleXMLElement   对象([@attributes] =&gt;数组([DatumVon] =&gt; 2017-01-01 [DatumBis]   =&GT; 2017-03-06))[1] =&gt; SimpleXMLElement对象([@attributes] =&gt;数组([DatumVon] =&gt; 2016-11-19 [DatumBis] =&gt; 2016-12-24))))[2]   =&GT; SimpleXMLElement对象([@attributes] =&gt;数组([Nummer] =&gt; 3)[Zeitraum] =&gt; SimpleXMLElement对象([@attributes] =&gt;数组(   [DatumVon] =&gt; 2017-03-07 [DatumBis] =&gt; 2017-04-06))))))

echo $items->Hotelcode."<br>";
echo $items->Hotelname."<br>";

此代码有效,但我想获取其他代码

<Zeitraum DatumVon="2017-01-01" DatumBis="2017-03-06"/>

2 个答案:

答案 0 :(得分:0)

只需对子项进行循环

$xml = simplexml_load_string($string);
foreach($xml->Saisondefinition->Saisonzeit as $Saisonzeit) {
   echo $Saisonzeit['Nummer'] . "<br>\n";
   foreach($Saisonzeit->Zeitraum  as $Zeitraum ) { 
       echo $Zeitraum['DatumVon'] . ' - ' . $Zeitraum['DatumBis'] . "<br>\n";
   }
}

<强> Demo on eval.in

答案 1 :(得分:0)

您可以使用类似......

之类的东西直接引用它们
echo $items->Saisondefinition[0]->Saisonzeit[0]->Zeitraum['DatumVon']."<br>";

主要是使用->elementName访问元素,而属性作为数组的元素访问,因此->elementName['attributeName']