我有以下XML:
<doc>
<str name="segment">20170913064727</str>
<str name="digest">427522d5ceb605f87755c909deac698a</str>
<str name="title">AMS Site</str>
<doc>
我想解析它并保存&#34; title&#34;到变量$ ergTitle(那将是&#34; AMS网站&#34;)。
我有以下PHP代码:
foreach($data->result->doc as $dat) {
foreach ($dat->str as $att) {
foreach ($att->attributes() as $a => $b) {
echo $a,'="',$b,"\"\n" . '<br>';
if ($b=='title') {
echo "OK";
}
}
}
}
结果是:
name="segment"
name="digest"
name="id"
name="title"
OKname="url"
name="content"
但是我怎么能得到name =&#34; title&#34;的价值呢?并将其保存到我的变量?
目标:我想打印内容&#34;内容&#34;,&#34; url&#34;,&#34; title&#34;等等(它用于搜索查询的结果网站。)
答案 0 :(得分:1)
您正在迭代元素的属性。在循环中,元素值位于$dat
变量中。在此示例中,由于示例XML,我不得不删除一个foreach()
循环:
<?php
$data = simplexml_load_file("a.xml");
foreach($data->str as $dat) {
foreach ($dat->attributes() as $a => $b) {
echo $a,'="',$b,'"';
if ($b=='title') {
echo "right one";
}
}
echo " -> ".$dat."<br>";
}
/* result */
name="segment" -> 20170913064727
name="digest" -> 427522d5ceb605f87755c909deac698a
name="title" right one -> AMS Site
如果你想在变量中找到它时放置标题,在循环中使用相同的变量:
<?php
$data = simplexml_load_file("a.xml");
foreach($data->str as $dat) {
foreach ($dat->attributes() as $a => $b) {
if ($b=='title') {
$title = $dat;
break;
}
}
}
echo "Title: ".$dat; // Title: AMS Site
答案 1 :(得分:1)
根据XML的结构,可能更容易循环遍历<str>
元素并构建一个将 name 属性映射到内容的数组。
$dat = simplexml_load_string($xml);
$attributes = [];
foreach ($dat->str as $str) {
$attributes[(string) $str['name']] = (string) $str;
}
然后,您可以访问$attributes['title']
下的“title”元素(或将其分配给您的$ergTitle
变量等)。