За последние 24 часа нас посетили 52617 программистов и 1764 робота. Сейчас ищет 1641 программист ...

Парсинг xml. Как проверить структуру

Тема в разделе "Прочие вопросы по PHP", создана пользователем kit, 20 май 2015.

  1. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    есть xlm (точнее его часть):
    <SubAdministrativeArea>
    <SubAdministrativeAreaName>Полесский район</SubAdministrativeAreaName>
    <Locality>
    <LocalityName>Полесск</LocalityName>
    <Premise>
    <PremiseName>станция Полесск</PremiseName>
    </Premise>
    </Locality>
    </SubAdministrativeArea>

    Как средствами PHP проверить является ли LocalityName единственным элементом в Locality, или имеется еще и Premise (или какие либо еще элементы кроме LocalityName (могут быть еще и другие)).
    Спасибо за предложенные варианты.
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Код (PHP):
    1. $xml = '<SubAdministrativeArea>
    2.   <SubAdministrativeAreaName>Полесский район</SubAdministrativeAreaName>
    3.   <Locality>
    4.     <LocalityName>Полесск</LocalityName>
    5.     <Premise>
    6.       <PremiseName>станция Полесск</PremiseName>
    7.     </Premise>
    8.   </Locality>
    9. </SubAdministrativeArea>';
    10. $xml = simplexml_load_string($xml);
    11. if (isset($xml->Locality->LocalityName) && $xml->Locality->children()->count()==1) {
    12.   echo 'LocalityName единственный потомок в Locality';
    13. } else {
    14.   echo 'LocalityName НЕ единственный потомок в Locality';
    15. }
     
  3. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    runcore друг, спасибо!
    $xml->Locality->children()->count()==1 это то что надо, не мог это найти! Остальное делал так же за исключением:
    isset($xml->Locality->LocalityName)
    Условие существования LocalityName я проверял просто if($xml->Locality->LocalityName) и вроде тоже работает.
    if(isset($xml->Locality->LocalityName)) и if($xml->Locality->LocalityName) это не одно и тоже?
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Технически нет. Но одно и то же в плане результата, в случае, если существует Localty.
    Если же Localty нет, то решение с isset продолжит работать, в то время как решение без оного, должно упасть.

    Кроме того, решение без isset может дать, в данном случае, ложный результат за счет динамической типизации содержимого LocalityName.
     
  5. kit

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

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    спасибо