За последние 24 часа нас посетили 22763 программиста и 1561 робот. Сейчас ищут 912 программистов ...

SimpleXML и атрибуты с двоеточием

Тема в разделе "Прочие вопросы по PHP", создана пользователем starkeen, 16 фев 2010.

  1. starkeen

    starkeen Активный пользователь

    С нами с:
    15 июн 2007
    Сообщения:
    37
    Симпатии:
    0
    Перелопатил форум, вопрос такой уже поднимался, но прозрачного решения по-прежнему нет.
    Часто в разных XML встречаются атрибуты, отделенные двоеточием от элемента. Давайте скажем раз и навсегда, можно ли их вытащить с помощью SimpleXML. Ну и, конечно же, чем их можно вытащить не особо напрягаясь.
    А то мне на досуге приспичило распарсить трек с карты Яндекса:
    Код (Text):
    1.  
    2. <?xml version="1.0" encoding="utf-8"?>
    3. <ym:ymaps xmlns:ym="http://maps.yandex.ru/ymaps/1.x">
    4.   <Representation xmlns="http://maps.yandex.ru/representation/1.x" xmlns:gml="http://www.opengis.net/gml">
    5.     <View>
    6.       <boundedBy xmlns="http://www.opengis.net/gml">
    7.         <Envelope>
    8.           <lowerCorner>37.200935 55.898888</lowerCorner>
    9.           <upperCorner>37.274418 55.917999</upperCorner>
    10.         </Envelope>
    11.       </boundedBy>
    12.     </View>
    13.     <Style gml:id="gpxLine">
    14.       <lineStyle>
    15.         <strokeColor>9933FF90</strokeColor>
    16.         <strokeWidth>4</strokeWidth>
    17.       </lineStyle>
    18.     </Style>
    19.     <Style gml:id="userobject">
    20.       <iconStyle>
    21.         <template>#placemark</template>
    22.       </iconStyle>
    23.       <balloonContentStyle>
    24.         <template>#balloon</template>
    25.       </balloonContentStyle>
    26.     </Style>
    27. и тд
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Это XML namespaces, курите в эту сторону.
     
  3. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Psih
    Бывает "Копайте *такую то тему* " бывает "смотрите в сторону *чего то* " бывает "кури *такую то тему*"
    Но курите в эту сторону ето что то новенькое аххахаха :D
     
  4. Enzo_brn

    Enzo_brn Активный пользователь

    С нами с:
    21 янв 2011
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Барнаул
    Ах-ха-ха))) Присоединяюсь к мысли "курить в сторону namespace" но что то не выходит ничего.. Может есть новые идеи у кого? Как все-же обратится, например к <cb:value> в XML
    Код (Text):
    1.  
    2. $str = "cb:value";
    3. $USD = $xml->item[0]->$str[0];
    не работает((
     
  5. alexfer

    alexfer Активный пользователь

    С нами с:
    2 авг 2010
    Сообщения:
    239
    Симпатии:
    0
  6. Enzo_brn

    Enzo_brn Активный пользователь

    С нами с:
    21 янв 2011
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Барнаул
    alexfer, разобралсо:
    Для этого
    Код (Text):
    1.  
    2. <item rdf:about="http://www2.bot.or.th/RSS/fxrates/fxrate-USD.xml">
    3. <title>...</title>
    4. <link>...</link>
    5. <description>30.1032 Thai Baht = 1 USD</description>
    6. <dc:language>en</dc:language>
    7. <dc:date>2011-08-09</dc:date>
    8. <dc:format>text/html</dc:format>
    9. <cb:country>TH</cb:country>
    10. <cb:baseCurrency>THB</cb:baseCurrency>
    11. <cb:targetCurrency>USD</cb:targetCurrency>
    12. <cb:value frequency="business" decimals="4">30.1032</cb:value>
    13. <cb:rateType>Daily</cb:rateType>
    14. <cb:application>statistics</cb:application>
    15. </item>
    будет так:
    Код (Text):
    1.  
    2. foreach ($xml->item as $entry){
    3.  
    4.  //Use that namespace
    5.  $namespaces = $entry->getNameSpaces(true);
    6.  //Now we don't have the URL hard-coded
    7.  $cb = $entry->children($namespaces['cb']);
    8.  echo $cb->country;
    9.  echo $cb->value;
    10. }
     
  7. Enzo_brn

    Enzo_brn Активный пользователь

    С нами с:
    21 янв 2011
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Барнаул
    Только бесит что нужно усе определять каждый раз:
    Код (Text):
    1.  
    2. $dc = $entry->children($namespaces['dc']);
    3. echo $dc->date,'<br>';
     
  8. MaXyC_Web_Studio

    MaXyC_Web_Studio Активный пользователь

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск
    хм, а я всегда реплейсил двоеточие перред обработкой строки ))))))))))))))))))