用PHP检索XML元素数据
我试图允许用户检索特定的XML节点并打印信息。我的XML数据如下所示:用PHP检索XML元素数据,php,xml,xpath,Php,Xml,Xpath,我试图允许用户检索特定的XML节点并打印信息。我的XML数据如下所示: <people> <person id="1"> <forename>Jim</forename> <surname>Morrison</surname> </person> <person id="2"> <forename>James</forena
<people>
<person id="1">
<forename>Jim</forename>
<surname>Morrison</surname>
</person>
<person id="2">
<forename>James</forename>
<surname>Frank</surname>
</person>
</people>
从这一点开始,我不确定如何继续,我已经研究了SimpleXML和XPATH,但我不确定如何使用它们来实现这一点。如果您能帮助找出解决此问题的主要方法,将不胜感激:
$xml=simplexml_load_file("credentials.xml") or die("Error: Cannot create object");
foreach($xml->children() as $people){
if ($people->forename == "james" ){echo $people->forename;}
}
这可能效率低下,因此如果其他人有更好的方法,请指定:)您应该使用
返回一个对象
从这里,您可以使用objects方法来获取所需的子对象,这些子对象也将是更多的SimpleXMLElement对象。让我们假设你首先想要孩子们叫人,然后想要人。获取person对象后,可以通过获取名称和值等的方法获取属性值。因为SimpleXMLElement实现了,所以可以使用循环来循环返回的列表/数组。让我们xpath()
:
上面的xpath表达式将选择任何将“James”作为
的
,并将其作为数组存储在$result
中
使用第2行末尾的[0]
,我们只选择该数组中的第一个条目,并将其存储在$result
中。这需要PHP>=5.4
我们也可以写下同样的结果:
$result = $xml->xpath("/people/person[forename = 'James']");
$result = $result[0];
如果XML中有超过1个James,我们只会得到第一个。
要获得所有果酱,请按照上面第1行的操作
然后,让我们输出xpath表达式选择的
:
echo $result->forename . ' ' . $result->surname .' has id ' . $result['id'] . ".";
如果$result
包含多个jamese,请执行以下操作:
foreach ($result as $person) {
echo $person->forename . ' ' . $person->surname .' has id ' . $person['id'] . "." . PHP_EOL;
}
查看它是否有效:这是一个很好的建议,我使用DOM实现了一个有效的问题解决方案,但我认为这比我的结果要好,所以我将尝试使用它,非常感谢。@LucasHolmes很高兴我能帮上忙。例如,您可以使用正则表达式(PCRE库,默认情况下应该启用)编写自己的解释器。您也可以自己解析整个文本,只需遍历每个字符并检测模式。
echo $result->forename . ' ' . $result->surname .' has id ' . $result['id'] . ".";
foreach ($result as $person) {
echo $person->forename . ' ' . $person->surname .' has id ' . $person['id'] . "." . PHP_EOL;
}