php - SimpleXML 搜索子节点并检索所有节点
问题描述
我或多或少需要指导才能继续前进..
有一个页面显示容器中的每个节点(对其进行处理)
XML
<archive>
<data id="1111">
<name>Name</name>
<text>Lots of stuff and things</text>
<etc>Etc</etc>
</data>
<data id="2222">
<name>Name</name>
<text>Different stuff and things</text>
<etc>Etc</etc>
</data>
<data id="3333">
<name>Name</name>
<text>More stuff and things</text>
<etc>Etc</etc>
</data>
// and so on
</archive>
这部分采用 XML 并回显值等..
$master = array_slice($xml_get->xpath('data'), $start_page, 25);
$master = array_reverse($master);
foreach($master as $arc) {
$last_name = $arc[0]->name;
$last_data = $arc[0]->data;
$last_etc = $arc[0]->etc;
// does stuff with values
}
我想要做的是有一个搜索字段,该字段采用该搜索关键字并搜索所有子节点,然后 foreach 每个匹配的节点+子节点。
老实说,我只是希望获得一些关于如何实现这一目标的指导。我知道如何通过 id= 单独抓取一个节点,但在那之后..需要指导。
解决方案
作为一个快速示例,<text>
使用 XPath 搜索元素(我已经更改了您提供的示例数据以显示它选择的差异)
$data = '<archive>
<data id="1111">
<name>Name</name>
<text>Lots of stuff and things</text>
<etc>Etc</etc>
</data>
<data id="2222">
<name>Name</name>
<text>Different stuff and things</text>
<etc>Etc</etc>
</data>
<data id="3333">
<name>Name</name>
<text>More stuff and other things</text>
<etc>Etc</etc>
</data>
</archive>';
$xml_get = simplexml_load_string($data);
$textSearch = "stuff and things";
$matches = $xml_get->xpath('//data[contains(text,"'.$textSearch.'")]');
foreach($matches as $arc) {
echo "text=".$arc->text.PHP_EOL;
}
输出..
text=Lots of stuff and things
text=Different stuff and things
XPath -//data[contains(text,"'.$textSearch.'")]
基本上说要查找具有包含正在搜索的字符串的值<data>
的元素的任何元素。<text>
您只需更改即可更改它使用的字段text
推荐阅读
- android - 如何通过 Dialog-Activity Communication 检索图像或“imagePath”?
- javascript - 在函数之前使用 setTimeout 循环完成子函数
- system-verilog - 当时将一个数组分配给一个 32 位的向量
- excel - Excel,数据透视表,减去而不是使用“差异”
- multithreading - 如何在 tkinter 中使用多线程来更新标签并同时在按钮事件控制的线程中执行计算?
- php - 来自查询字符串的回显变量?
- javascript - PWA 问题 - 单击“添加到主屏幕”后没有任何反应
- javascript - 在视图中构建要发送到 HighCharts 的数据
- java - 关键配置服务器
- javascript - 试图让 Prerender SPA 插件在 Vue.js CLI 3 上工作