Помогите распарсить XML XMLReader'ом

350
22 мая 2017, 00:33

Коллеги, хмлка имеет вид

<section name="Рюкзаки">
      <section name="Рюкзаки Deuter" />
      <section name="Рюкзаки экспедиционные">
        <sectionPropertiesList>
          <property name="Плотность внешнего материала">
            <item value="300D"/>
            <item value="210T"/>
            <item value="600D"/>
            <item value="420D"/>
            <item value="290T"/>
          </property>
          <property name="Плотность материала дна">
            <item value="600D"/>
            <item value="210T"/>
            <item value="420D"/>
          </property>
          <property name="Фурнитура"/>
          <property name="Количество ручек для переноски"/>
          <property name="Боковые кормашки"/>
          <property name="Грудная стяжка"/>
          <property name="Боковые стяжки"/>
          <property name="Противооткидочные стропы"/>
          <property name="Карманы на поясе"/>
          <property name="Узел крепления горного оборудования"/>
        </sectionPropertiesList>
      </section>
      <section name="Рюкзаки городские">
        <sectionPropertiesList>
          <property name="Для города"/>
          <property name="Плотность внешнего материала">
            <item value="300D"/>
            <item value="210T"/>
            <item value="600D"/>
            <item value="420D"/>
            <item value="290T"/>
          </property>
    ...
        </sectionPropertiesList>
      </section>
  </section>

Как ее распарсить через xmlreader при двух одинаковых названиях узлов?

$sect = array();
$this->cat = $this->reader->getAttribute('name');
$name = strtolower($this->reader->localName);
while ($this->reader->moveToNextAttribute()) {
    // здесь мы получаем атрибуты если они есть
    $sect[$name]['__attribs'][$this->reader->localName] = $this->reader->value;
}
while ($this->reader->read()) {
    if ($this->reader->nodeType == XMLREADER::ELEMENT && $this->reader->localName == 'section') {
        $name1 = strtolower($this->reader->localName);
        while ($this->reader->moveToNextAttribute()) {
            // здесь мы получаем атрибуты если они есть
            $sect[$name][$name1]['__attribs'][$this->reader->localName] = 2;//$this->reader->value;
        }
    }
}
READ ALSO
Задать место для переменой

Задать место для переменой

Подскажите как можно реализовать такое, сначала я в базу добавляю текст, я хочу указать в этом тексте места где у меня будут подставляться...

249
чтение названия файла на русском языке

чтение названия файла на русском языке

Всем приветЧитаю содержимое директории вот так:

281
Удалить всё кроме определённых слов

Удалить всё кроме определённых слов

Помогите, пожалуйста, составить составить регулярное выражение (литературу читал, на этом моменте не получается), чтобы, к примеру, из строк

337
Почему получается ошибка Call to a member function getRow() on null in?

Почему получается ошибка Call to a member function getRow() on null in?

При использовании данной библиотеки: https://githubcom/colshrapnel/safemysql/blob/master/safemysql

398