php - справка simpleXML - PullRequest
       2

php - справка simpleXML

0 голосов
/ 22 апреля 2011

У меня есть этот 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
}

Ответы [ 2 ]

0 голосов
/ 22 апреля 2011

из руководства по PHP SimpleXMLElement :: attribute (немного отредактировано)

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

<?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

}
?>
0 голосов
/ 22 апреля 2011
$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
}
...