Запрос XPATH на файл XML — дети и братья и сестры

у меня есть следующий документ XML, из которого мне нужно получить для каждого узла его детей ( < KA> /< код> и < TPV> /< TPV> / …< A>). Для лучшего понимания вот что мне нужно:

<KATU/KA/kod> | <KATU/TPV/TPVS/TN> | <KATU/TPV/TPVS/TSA/TS/A>
k11 | VP11 | 11
k21 | VP21 | 21
k31 | VP31 | 31
k32 | VP32 | 32
k33 | VP33 | 33
k41 | VP41 | 41
k41 | VP41 | 42
k41 | VP41 | 43
k51 | VP51 | 51

Основная проблема (например, значения из примера k41 и его 41,42,43) заключается в том, что узлы, которые мне нужно получить, не детские, а родные по порядку < KA>< TPV>< KA>< TPV> …

Так что мне нужно найти все < A> узлы (дети < TPV>< Т>< TSA>< Тс>) а потом возьми своего старшего родного брата (имею ввиду его родителей < TPV> верхний брат < Ка>) чтобы получить < KA> /< KOD>

Я надеюсь, что вы понимаете мою проблему, я не могу описать это больше, потому что мой английский.

Спасибо за ответ

Вот мой XML:

<?xml version="1.0" encoding="utf-8" ?>
<PV>
<PRAV_VZTAHY>
<TYPPRA>
<TN>VP</TN>
</TYPPRA>
</PRAV_VZTAHY>
<OPRAV_SUBJEKT>
<CHAROS_KOD>1112</CHAROS_KOD>
<OPSUB_ADRESA>
<adresa>
<nazev_ulice>xxx</nazev_ulice>
</adresa>
</OPSUB_ADRESA>
</OPRAV_SUBJEKT>
<OKRESY>
<OKRES>
<nuts4>123456</nuts4>
<name>asdf</name>
</OKRES>
<OBCE>
<OBEC>
<kod>594580</kod>
<name>mn</name>
</OBEC>
<KATU>
<KA>
<kod>k11</kod>
<name>q11</name>
</KA>
<TPV>
<TPVS>
<TN>VP11</TN>
<TSA>
<TS>
<A>11</A>
</TS>
</TSA>
</TPVS>
</TPV>
</KATU>
</OBCE>
<OKRES>
<nuts4>46786</nuts4>
<name>qwer</name>
</OKRES>
<OBCE>
<OBEC>
<kod>525804</kod>
<name>mn</name>
</OBEC>
<KATU>
<KA>
<kod>k21</kod>
<name>q21</name>
</KA>
<TPV>
<TPVS>
<TN>VP21</TN>
<TSA>
<TS>
<A>21</A>
</TS>
</TSA>
</TPVS>
</TPV>
</KATU>
<OBEC>
<kod>540978</kod>
<name>mn</name>
</OBEC>
<KATU>
<KA>
<kod>k31</kod>
<name>q31</name>
</KA>
<TPV>
<TPVS>
<TN>VP31</TN>
<TSA>
<TS>
<A>31</A>
</TS>
</TSA>
</TPVS>
</TPV>
<KA>
<kod>k32</kod>
<name>q32</name>
</KA>
<TPV>
<TPVS>
<TN>VP32</TN>
<TSA>
<TS>
<A>32</A>
</TS>
</TSA>
</TPVS>
</TPV>
<KA>
<kod>k33</kod>
<name>q33</name>
</KA>
<TPV>
<TPVS>
<TN>VP33</TN>
<TSA>
<TS>
<A>33</A>
</TS>
</TSA>
</TPVS>
</TPV>
</KATU>
<OBEC>
<kod>541265</kod>
<name>mn</name>
</OBEC>
<KATU>
<KA>
<kod>k41</kod>
<name>q41</name>
</KA>
<TPV>
<TPVS>
<TN>VP41</TN>
<TSA>
<TS>
<A>41</A>
</TS>
<TS>
<A>42</A>
</TS>
<TS>
<A>43</A>
</TS>
</TSA>
</TPVS>
</TPV>
</KATU>
<OBEC>
<kod>553387</kod>
<name>mn</name>
</OBEC>
<KATU>
<KA>
<kod>k51</kod>
<name>q51</name>
</KA>
<TPV>
<TPVS>
<TN>VP51</TN>
<TSA>
<TS>
<A>51</A>
</TS>
</TSA>
</TPVS>
</TPV>
</KATU>
</OBCE>
</OKRESY>
</PV>

вот мое начало:

foreach ($xml->xpath("//KATU") as $ku) {
print_r($ku);
print "<hr />";
}

0

Решение

Вам нужно прочитать каждый узел и проверить, есть ли у этого узла дочерний узел или нет. А затем перебрать их. Вот это ссылка на вопрос stackoverflow, который, я думаю, ответит на ваш вопрос.

Или вы также можете проверить этот а также этот ссылка на сайт. Проверьте комментарии людей в них.

Я надеюсь, что вы найдете ответ по этим ссылкам.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector