php — справка по SimpleXML

#php #simplexml

Вопрос:

У меня есть этот XML-код :

 <?xml version="1.0"?>
<Days>
  <day value="1">
    <Imsaak>04:59</Imsaak>
    <Fajr>05:09</Fajr>
    <Sunrise>06:23</Sunrise>
    <Dhuhr>12:39</Dhuhr>
    <Asr>16:12</Asr>
    <Sunset>18:55</Sunset>
    <Maghrib>19:10</Maghrib>
    <Isha>20:04</Isha>
  </day>
  <day value="2">
    <Imsaak>04:58</Imsaak>
    <Fajr>05:08</Fajr>
    <Sunrise>06:22</Sunrise>
    <Dhuhr>12:39</Dhuhr>
    <Asr>16:12</Asr>
    <Sunset>18:56</Sunset>
    <Maghrib>19:11</Maghrib>
    <Isha>20:05</Isha>
  </day>
</Days>
 

и я хочу выбрать <day> узел в зависимости от значения атрибута

Я использую класс SimpleXMLElement, но я не знаю, как выбрать значение arrtibute.

как я могу это сделать??

ИЗМЕНИТЬ: мой код :

 include 'days.xml';

$xml = new SimpleXMLElement($xmlstr);

foreach ($xml->day as $day) {
   // process data
}
 

Комментарии:

1. пожалуйста, покажите, что вы написали до сих пор ?

Ответ №1:

из руководства php SimpleXMLElement::атрибуты (немного отредактировано)

Учитывая эти данные:

 <?xml version="1.0" encoding="utf-8"?>
<data>
   <item ID="30001">
      <Company>Navarro Corp.</Company>
   </item>
   <item ID="30002">
      <Company>Performant Systems</Company>
   </item>
   <item ID="30003">
      <Company>Digital Showcase</Company>
   </item>
</data>
 

Пример перечисления значений атрибута ID и элемента компании:

 <?php
$xmlObject = new SimpleXMLElement($xmlstring);
foreach ($xmlObject->children() as $node) {
        $arr = $node->attributes();   // returns an array
        if(in_array("30002", $arr)){     // search the value of an attribute
            print ("Company=".$node->Company);
        }
        //depending of your needs, you could use a switch / case instead of use an if

}
?>
 

Ответ №2:

 $xml = new SimpleXMLElement($xmlStr)
$xml->day[0]->attribute()->value;//will echo out 1  

конечно, вы можете прокручивать весь день вот так:

 foreach($sml->day as $day){
     $day->attribute()->value; //will trace out 1 and then 2
}