@Angelxalfa

Как правильно пропарсить XML через Xpath?

Добрый день! Есть xml вида:
<street street="улица1">
    <house house="1">
      <appartment appartment="1"/>
      <appartment appartment="2"/>
      <appartment appartment="4"/>
    </house>
    <house house="8">
      <appartment appartment="1"/>
      <appartment appartment="2"/>
      </house>
     </street >
<street street="улица2">
    <house house="1">
      <appartment appartment="1"/>
      <appartment appartment="2"/>
      <appartment appartment="4"/>
    </house>
    <house house="8">
      <appartment appartment="1"/>
      <appartment appartment="2"/>
      </house>
     </street >


Мне нужно выбрать квартиры только в определенном доме на определенной улице (в реальном XML сотни улиц и тысячи домов).
Дома на определенной улице выбираю через xpath, полученное пропускаю через цикл и получаю дома

$xml = simplexml_load_file('file.xml');
						$names = $xml->xpath("//street[@street='".$street."']");
						foreach($names as $street) {
							foreach($street->house as $house) {
								$house_num = $house[house];
								echo '<option value="' . $house_num . '">' . $house_num . '</option>'; 
							}


Вопрос. Как сделать тоже самое для квартир. Если в этот же цикл вставить перебор по квартирам - будут повторяться одни и те же квартиры по кол-ву выбранных xpath домов. Можно ли через x-path выбрать дом, где атрибут = чему-то, который находтся в теге улица, где атрибут = чему-то....
Что-то типа
$xml->xpath("//house[@house='".$house."' AND ../street[@street='".$street."']]");


Заранее спасибо!
  • Вопрос задан
  • 439 просмотров
Решения вопроса 1
@throughtheether
human after all
Не вполне ясно, что именно вы хотите получить (хотя бы на примере вашего тестового XML).
Выражение вида
//street[@street="baker street"]/house[@house="221B"]/appartment
должно выбрать все квартиры указанного дома на указанного улице. Если нужны номера, то добавьте в конец /@appartment.

Apartment, кстати. И представляется излишним дублирование имен нод именами атрибутов.

Можно ли через x-path выбрать дом, где атрибут = чему-то, который находтся в теге улица, где атрибут = чему-то....
При помощи оси ancestor или, если родство непосредственное, parent.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 09:29
2500 руб./за проект
25 апр. 2024, в 09:27
4000 руб./за проект
25 апр. 2024, в 09:20
10000 руб./за проект