繁体   English   中英

使用PHP检索XML元素数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM