2

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>。我当前的代码只返回一个空数组:/

4

2 回答 2

1

问题不在于following-sibling零件。到那时,您已经没有选择任何节点。这是因为Tablename[incoming]意思是“Tablename有一个名为”的子元素的元素incomingTablename[.="incoming"]相反,您需要测试元素的内容:

/Routes/Route[@type="source"]/Table/Tablename[.="incoming"]/following-sibling::Fields/Fieldsname[@ref="dest"]
于 2012-09-13T21:11:35.727 回答
1

虽然我会接受@lonesomeday 的回答,但这里可能是一个更容易阅读的替代方案:

$foo = $doc->xpath('/Routes/Route[@type="source"]/Table[Tablename="incoming"]/Fields/Fieldsname[@ref="dest"]');
于 2012-09-14T12:17:14.873 回答