[英]Retrieve XML element data with PHP
我试图允许用户检索特定的XML节点并打印信息。 我的XML数据如下:
<people>
<person id="1">
<forename>Jim</forename>
<surname>Morrison</surname>
</person>
<person id="2">
<forename>James</forename>
<surname>Frank</surname>
</person>
</people>
我希望能够使用名称或ID搜索我的XML文档,例如,我想说:“检查james是否存在,如果james存在,则打印出他的信息,否则打印出错误消息”。 我认为我首先需要在文件中包含以下内容:
$xml=simplexml_load_file("credentials.xml") or die("Error: Cannot create object");
从现在开始,我不确定如何继续,我已经看过SimpleXML和XPATH,但是不确定如何使用它们来实现这一点。 谢谢您的帮助
您应该使用手册 。
simplexml_load_file返回一个SimpleXMLElement对象。
从这里,您可以使用objects children方法来获取所需的孩子,这也将是更多SimpleXMLElement对象。 假设您首先要让孩子叫人,然后要人。 当获得人员对象时,可以通过方法属性获取属性的值以获取名称和值等。由于SimpleXMLElement实现了Traversable ,因此可以使用foreach循环遍历返回的列表/数组。
让我们xpath()
:
$xml = simplexml_load_string($x); // assume XML in $x
$result = $xml->xpath("/people/person[forename = 'James']")[0];
上面的xpath-expression将选择具有'James'作为<forename>
任何<person>
并将其存储为$result
的数组。
在第2行的末尾有[0]
时,我们仅选择该数组中的第一个条目并将其存储在$result
。 这需要PHP> = 5.4。
我们也可以写得到相同的结果:
$result = $xml->xpath("/people/person[forename = 'James']");
$result = $result[0];
如果XML中的James超过1个,我们只会得到第一个。 要获取所有Jameses,请按照上面的第1行进行操作。
然后,输出由xpath表达式选择的<person>
:
echo $result->forename . ' ' . $result->surname .' has id ' . $result['id'] . ".";
如果$result
包含几个Jameses,请执行以下操作:
foreach ($result as $person) {
echo $person->forename . ' ' . $person->surname .' has id ' . $person['id'] . "." . PHP_EOL;
}
看到它正常工作: https : //eval.in/222195
弄清楚了如何以此来解决大多数问题:
$xml=simplexml_load_file("credentials.xml") or die("Error: Cannot create object");
foreach($xml->children() as $people){
if ($people->forename == "james" ){echo $people->forename;}
}
这可能效率不高,所以如果其他人有更好的方法,请指定:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.