PHP simpleXML:解析多个条目的特定属性值

时间:2017-09-14 13:43:51

标签: php xml simplexml

我有以下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;等等(它用于搜索查询的结果网站。)

2 个答案:

答案 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变量等)。