hzs
@hzs
Создаю сайты

Как правильно обработать результат XPath в цикле?

Коллеги, добрый день.
Стоит задача распарсить xml файл таким образом, чтобы задав значения двух элементов получить значение третьего элемента, находящегося на том же уровне, что и два известных.
Есть xml с примерно таким содержимым:
<Model>
            <idModel>26016</idModel>
            <sModel>DeLorean</sModel>
            <idMark>26015</idMark>
        </Model>
        <Model>
            <idModel>2986</idModel>
            <sModel>Avenger</sModel>
            <idMark>44</idMark>
        </Model>
        <Model>
            <idModel>2976</idModel>
            <sModel>Caliber</sModel>
            <idMark>44</idMark>
        </Model>
        <Model>
            <idModel>2977</idModel>
            <sModel>Caravan</sModel>
            <idMark>44</idMark>
        </Model>
        <Model>
            <idModel>3393</idModel>
            <sModel>Challenger</sModel>
            <idMark>44</idMark>
        </Model>
        <Model>
            <idModel>2978</idModel>
            <sModel>Charger</sModel>
            <idMark>44</idMark>
        </Model>

Сама обработка сделана так:
foreach ($idref->xpath('//Model') as $item) {
					if ($item->idMark == $idmark && $item->sModel == $smodel) {
						$idmodel = $item->idModel;
						break;
					}
				}

То есть зная $idmark и $smodel нам нужно получить значение $idmodel.
Скорее всего за перебор в цикле мне стоит надавать по рукам, но другого способа я не придумал.
А проблема кода в том, что если вместо $idmark поставить сразу значение (в нашем случае 44), либо вместо $smodel подставить в условие "Caliber", то условие отработает и произойдёт присвоение $idmodel.
А если оставить код как есть, условие не срабатывает.
  • Вопрос задан
  • 734 просмотра
Решения вопроса 1
viktorvsk
@viktorvsk
Слабо понял, что куда подставить и что не работает, если ничего не трогать, но с помощью xpath можно сделать вот так:
//sModel[../idModel='2986' and ../idMark='44']
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
hzs
@hzs Автор вопроса
Создаю сайты
В итоге, решение задачи свелось к одной строке кода:
echo $idref->xpath('//idModel[../sModel="' . $smodel . '" and ../idMark=' . $idmark . ']')[0];
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы