【问题标题】:Obtain parentnode with a xpath query on cakephp使用 cakephp 上的 xpath 查询获取父节点
【发布时间】:2011-05-08 20:33:07
【问题描述】:

所以,我正在使用 Cakephp,我有一个看起来像这样的 xml 文件:

<something>
<table id="t1">
  <columns>
    <column id="c1"/>
    <column id="c2"/>
  </columns>
</table>
<table id="t2">
  <columns>
......
</something>

我使用 Set::extract 根据它的 id 搜索列,那个没有问题:

Set::extract("/something/table/columns/column[id=$column_id"]", $array);

现在我需要获取该列的父表。我尝试使用 Set 和 SimpleXMLElement,但无济于事。

有人可以帮助我吗?谢谢

【问题讨论】:

  • 好问题,+1。有关不使用任何反向轴的完整且简短的 XPath 解决方案,请参阅我的答案。 :)

标签: php xml cakephp xpath


【解决方案1】:

使用

Set::extract("/something/table[columns/column[id=$column_id"]]", $array); 

XPath 表达式

/something/table[columns/column[id=$column_id"]]

选择作为顶部元素something 的子元素并且具有columns/column 孙子元素的所有table 元素,其id 子元素的字符串值等于变量$column_id的字符串值。

【讨论】:

  • 我对 XPath 不太了解,但理论上它可能会起作用。它只是没有 Set::extract 它给了我一个空数组。
  • @peugas55:尝试使用 SimpleXMLElement::xpath
  • @peugas55:我不知道 PHP 和它使用的 XPath 引擎或它的 API。如果这个 XPath 表达式“不起作用”,那么您的问题不是关于 XPath,而是关于 XPath 的这个特定实现。我可以提供一个完整的 XSLT 代码示例,确认我的答案中的 XPath 表达式选择了想要的元素——你想让我这样做吗?
  • 就像我说的,我也认为查询应该可以工作。当我使用 Set::extract 时它不会。我尝试了 SimpleXMLElement::xpath,它终于可以工作了。唯一的问题是它需要是 '$column_id' 而不仅仅是 $columnd_id,这应该很明显。
猜你喜欢
  • 2015-09-28
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多