Получить значение XML родителя / предка, используя Xpath и PHP?
Допустим, у меня есть этот XML:
<Routes>
<Route ref="timeconditions">
<Table>
<Tablename>timeconditions</Tablename>
<Fields>
<Fieldsname>truegoto</Fieldsname>
</Fields>
</Table>
</Route>
</Routes>
PHP:
$doc = new SimpleXMLElement('routingConfig.xml', null, true);
$foo = $doc->xpath('/Routes/Route[@ref="timeconditions"]/Table/Fields[@Fieldsname="truegoto"]/ancestor::Tablename');
print_r($foo);
Возвращает пустой массив. Теперь я понимаю, что я в основном копаюсь с ребенком, потом делаю резервную копию его родителя, но в моем контексте это то, что мне нужно сделать. Что я делаю неправильно? Я пытаюсь получить <Fieldsname>falsegoto</Fieldsname>
ценность родного брата называется <Tablename>
,
Собираюсь косяком уставиться на это....
2 ответа
Fields
не имеет атрибута Fieldsname
это дочерний узел, а также Tablename
родной брат Fields
не предок. Пытаться
$foo = $doc->xpath('/Routes/Route[@ref="timeconditions"]/Table/Fields[Fieldsname="truegoto"]/preceding-sibling::Tablename');
Используйте:
/*/*/Table[Fields/Fieldsname = 'truegoto']/Tablename
Это выбирает любой Tablename
элемент, который является ребенком любого Table
элемент, у которого есть внук (чей родитель Fields
) Fieldsname
чье строковое значение 'truegoto'
и что (Table
element) является внуком верхнего элемента XML-документа.
Сделать примечание:
Обратные оси не используются.
Из-за этого выражение становится короче, проще и понятнее.