PHP SimpleXML Получение атрибута дочернего узла на основе атрибута узла

0

Я пытаюсь пропустить XML файл, отформатированный так:

<colors>
...
</colors>
<sets>
    <settype type="hr" paletteid="2" mand_m_0="0" mand_f_0="0" mand_m_1="0" mand_f_1="0">
        <set id="175" gender="M" club="0" colorable="0" selectable="0" preselectable="0">
            <part id="996" type="hr" colorable="0" index="0" colorindex="0"/>
        </set>
        ...
    </settype>
    <settype type="ch" paletteid="3" mand_m_0="1" mand_f_0="1" mand_m_1="0" mand_f_1="1">
        <set id="680" gender="F" club="0" colorable="1" selectable="1" preselectable="0">
            <part id="17" type="ch" colorable="1" index="0" colorindex="1"/>
            <part id="17" type="ls" colorable="1" index="0" colorindex="1"/>
            <part id="17" type="rs" colorable="1" index="0" colorindex="1"/>
        </set>
        ...
    </settype>
</sets>

Я хочу повторить атрибут id каждого set в settype, где settype type - 'hr'

Это то, что у меня до сих пор, но я не уверен, что делать с массивом $ hr, чтобы эхо отослать идентификаторы

$hr = $xml->xpath('//sets/settype[@type="hr"]/set');
Теги:
xpath
simplexml

1 ответ

1
Лучший ответ

Ты почти там. Класс SimpleXMLElement самом деле не предлагает каких-либо методов для доступа к определенному атрибуту или получить его значение. Что он делает, так это реализовать интерфейс Taversable и поддерживает доступ к массиву. Документация по классу стоит посмотреть, особенно на SimpleXMLElement::attributes пользователя в SimpleXMLElement::attributes, которые на самом деле говорят вам, как вы можете повторить идентификатор, который вам SimpleXMLElement::attributes.

В принципе, вы можете сохранить все, что у вас есть до сих пор (включая $hr = $xml->xpath();). После этого простое обращение к экземплярам SimpleXMLElement в $hr и выполнение этого:

foreach ($hr as $set) {//set is a SimpleMLElement instance
    echo 'ID is: ', (string) $set['id'];
}

Как вы можете видеть, атрибуты доступны как индексы массивов и тоже SimpleXMLElements (поэтому вам нужно отнести их к строке для генерации SimpleXMLElements результата).

демонстрация

  • 0
    Блестяще, большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню