使用Xpath和PHP获取XML父/祖先的价值?

时间:2012-09-12 21:26:15

标签: php xml xpath parent siblings

假设我有这个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>

cros cros cros地盯着这个....

2 个答案:

答案 0 :(得分:1)

Fields没有属性Fieldsname是子节点,Tablename也是Fields的兄弟,而不是祖先。试试

$foo = $doc->xpath('/Routes/Route[@ref="timeconditions"]/Table/Fields[Fieldsname="truegoto"]/preceding-sibling::Tablename');

答案 1 :(得分:0)

使用

/*/*/Table[Fields/Fieldsname = 'truegoto']/Tablename

这将选择任何Tablename元素,该元素是具有孙子(其父级为TableFields的任何Fieldsname元素的子元素,其字符串值为{{1那个('truegoto'元素)是XML文档顶级元素的孙子。

请注意

  1. 不使用反向轴。

  2. 因此,表达式更短,更简单,更容易理解。