Получить значение 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-документа.

Сделать примечание:

  1. Обратные оси не используются.

  2. Из-за этого выражение становится короче, проще и понятнее.

Другие вопросы по тегам