如何在php中使用follow-sibling xpath查询?

时间:2012-09-13 20:40:05

标签: php xpath siblings

XML:

<Routes>
  <Route type="source" >
   <Table>
     <Tablename>incoming</Tablename>
     <Fields>
       <Fieldsname ref="dest">truegoto</Fieldsname>
     </Fields>
   </Table>
  </Route>
</Routes>

PHP:

$doc    = new SimpleXMLElement('routingConfig.xml', null, true);
$foo = $doc->xpath('/Routes/Route[@type="source"]/Table/Tablename[incoming]/following-sibling::Fields/Fieldsname[@ref="dest"]');
print_r($foo);

通过了解truegoto来尝试获取<Tablename>incoming</Tablename>。我当前的代码只返回一个空数组:/

2 个答案:

答案 0 :(得分:1)

问题不在following-sibling部分。到那时,您已经没有选择任何节点。这是因为Tablename[incoming]表示“Tablename元素具有名为incoming的子元素”。您需要使用Tablename[.="incoming"]来测试元素的内容:

/Routes/Route[@type="source"]/Table/Tablename[.="incoming"]/following-sibling::Fields/Fieldsname[@ref="dest"]

答案 1 :(得分:1)

虽然我会接受@ lonesomeday的回答,但这可能是一个更容易理解的选择:

$foo = $doc->xpath('/Routes/Route[@type="source"]/Table[Tablename="incoming"]/Fields/Fieldsname[@ref="dest"]');