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
}

我想做的是有一个搜索字段,它接受该搜索关键字并搜索所有子项,然后搜索每个匹配的节点+子项。

老实说,我只是希望能为如何做到这一点提供一些指导。我知道如何通过id=单独抓取节点,但在那之后。。需要指导。

作为一个快速示例,使用XPath搜索<text>元素(我已经更改了您提供的示例数据,以显示它选择的内容的差异(

$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.'")]基本上说要查找任何具有<text>元素的<data>元素,该元素的值包含要搜索的字符串。您可以通过更改text来更改它使用的字段

最新更新