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]意味するためです。代わりに、要素のコンテンツをテストする必要があります。TablenameincomingTablename[.="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 に答える