PHP SimpleXML XPath 获取下一个父节点

标签 php xpath simplexml parent siblings

我以前从未在这里问过问题,所以如果格式不正确或不够具体,请原谅我的问题。我只是一个小白,对PHP和XPath了解甚少。

我有一个这样的 XML 文件:

<catalogue>
 <item>
  <reference>A1</reference>
  <title>My title1</title>
 </item>
 <item>
  <reference>A2</reference>
  <title>My title2</title>
 </item>
</catalogue>

我正在使用 SimpleXML 提取此文件:

$file = "products.xml";
$xml = simplexml_load_file($file) or die ("Unable to load XML file!");

然后我使用来自 URL 参数的引用来使用 PHP 获取有关“项目”的额外详细信息:

foreach ($xml->item as $item) {
if ($item->reference == $_GET['reference']) {
 echo '<p>' . $item->title . '</p>';
}

所以从像 www.mysite.com/file.php?reference=A1 这样的 URL

我会得到这个 HTML:

<p>My title1</p>

我意识到我可能做得不对,欢迎提出改进建议。

我的问题是,我想找到下一个和上一个“项目”的详细信息。如果我从 URL 中知道 reference=A1,我如何找到下一个“项目”的引用、标题等?如果我只有“A1”并且我知道这是一个引用节点,我如何获得这样的 HTML:

<p>Next item is My title2</p>

我已经阅读了有关 following-sibling 的内容,但我不知道如何使用它。我只能找到引用节点的以下兄弟节点,这不是我需要的。

感谢任何帮助。

最佳答案

你可以使用:

/catalogue/item[reference='A1']/following-sibling::item[1]/title

含义:来自 catalogue 根元素的 item 元素子元素,具有带 'A1' 字符串值的 reference 元素,导航到第一个后续同级 item 元素的 title 子元素。

关于PHP SimpleXML XPath 获取下一个父节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626971/

相关文章:

php - 如何从 PHP 中的字符串中提取 URL?

php - 从 <content :encoded> 获取图像 src

php openssl : how to match the private key with the certificate

php - 在 JS 中下载用 PHP 创建的 ZIP 文件

xml - 使用 XPath string() 从 bash 脚本中的 XML 获取属性值

xml - 在 XPath 谓词中使用祖先轴的问题

php - 使用 Javascript/jquery 将 url 从单独的目录填充到 div 中

php - 正则表达式工作不正常

python-3.x - 如何从xpath提取元素标签中不存在的字段?

PHP:发送 POST 请求然后读取 XML 响应?