1

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

瞪大眼睛看着这个......

4

2 回答 2

1

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

$foo = $doc->xpath('/Routes/Route[@ref="timeconditions"]/Table/Fields[Fieldsname="truegoto"]/preceding-sibling::Tablename');
于 2012-09-12T21:38:04.190 回答
0

使用

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

这将选择任何Tablename元素的子元素,该Table元素的孙子元素(其父元素为FieldsFieldsname,其字符串值为'truegoto',并且该(Table元素)是 XML 文档顶部元素的孙子元素。

请注意

  1. 不使用反向轴。

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

于 2012-09-13T05:16:45.383 回答