gpt4 book ai didi

php - 使用 XMLReader、DOM、Xpath 获取给定节点的标签名称和值

转载 作者:行者123 更新时间:2023-12-02 05:16:03 24 4
gpt4 key购买 nike

我需要查询 xml 文档,然后显示特定的标签值,例如名字、姓氏、所属部门(部门)、职务。

我正在使用 XMLReader,因为我可能需要处理大型 XML 文件。我使用 DomXPath 来过滤数据,但我不知道如何检索每个元素的节点名称和值。下面的代码仅返回“member”作为节点名称?

如有任何帮助,我们将不胜感激。

<?php
$reader = new XMLReader();
$reader->open('include/staff.xml');

while ($reader->read()){
switch($reader->nodeType){
case(XMLREADER::ELEMENT):
if($reader->localName === 'staff'){
$node = $reader->expand();
$dom = new DomDocument();
$dom->formatOutput = true;
$n = $dom->importNode($node, true);
$dom->appendChild($n);
$xp = new DomXpath($dom);
$res = $xp->query("/staff/member[groups='HR']");
}
}
}
echo $res->item(0)->nodeName;
echo $res->item(0)->nodeValue;
?>

最佳答案

还是有点粗糙,但这就是我想要的。我发现我的 xpath 查询导致了这个问题。

<?php
$reader = new XMLReader();
$reader->open('include/staff.xml');
$keywords = '';
$query = "//member[groups='Research'][contains(translate(forename,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') ,'$keywords') or contains(translate(surname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'), '$keywords')]/*";
while ($reader->read()){
switch($reader->nodeType){
case(XMLREADER::ELEMENT):
if($reader->localName === 'staff'){
$node = $reader->expand();
$dom = new DomDocument();
$dom->formatOutput = true;
$n = $dom->importNode($node, true);
$dom->appendChild($n);
$xp = new DomXpath($dom);
$results = $xp->query($query);
}
}
}
$member = array();
$staff = array();
echo $results->length;
for($i=1; $i<$results->length; $i++){
if($results->item($i)->nodeName !== 'id'){
$member[$results->item($i)->nodeName] = $results->item($i)->nodeValue;
}else{
array_push($staff, $member);
}
}
array_push($staff, $member);
var_dump($staff);

?>

关于php - 使用 XMLReader、DOM、Xpath 获取给定节点的标签名称和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2378210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com