如何通过比较xml文件的属性从xml文件中选择数据?

时间:2014-01-17 14:47:41

标签: php xml

这是我的xml文件note.xml文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<agents>
    <agent>
    <id>1</id>
    <image> img/primary-nav-logo.png</image>
    <name>Tommy Jenkin</name>
    <company>CJenkins Insurance</company>
    <street>Insurance150 S State Stree</street>
    <city>Linkend</city>
    <phone>(773) 561-4331</phone>
    </agent>
    <agent>
    <id>2</id>
    <image> img/primary-nav-logo.png</image>
    <name>Tommy Jenkin</name>
    <company>CJenkins Insurance</company>
    <street>Insurance150 S State Stree</street>
    <city>Linkend</city>
    <phone>(773) 561-4331</phone>
    </agent>
</agents>

我必须打印id 1的xml记录,我在这里写了代码

<?php
    $xml = simplexml_load_file("note.xml") or die("Error: Cannot create object");
    foreach($xml->xpath('//agent') as $item) { 
    $row = simplexml_load_string($item->asXML());
    $v = $row->xpath('//id[. ="1"]');
    if($v[0]){ 
        print $item->id; 
        print $item->image; 
        print $item->name; 
        print $item->company; 
        print $item->street; 
        print $item->city;
        print $item->phone; 
    }
    else{
        echo 'No records';
    }
?>

请建议我在哪里错了

2 个答案:

答案 0 :(得分:1)

您不需要调用$item->asXML(),因为$item已经是SimpleXML对象。而且您不必遍历数组,因为您可以直接查询必要的代理。试试这个:

<?php
$xml = simplexml_load_file("note.xml") or die("Error: Cannot create object");
$agent = $xml->xpath('//agent[id=1]');
if (!empty($agent)) {
    $item = $agent[0];
    print $item->id;
    print $item->image;
    print $item->name;
    print $item->company;
    print $item->street;
    print $item->city;
    print $item->phone;
} else {
    echo 'No records';
}

答案 1 :(得分:1)

首先,您缺少foreach循环的结束括号。

其次,您可以使用xPath本身来完成此操作。

看看这段代码:

<pre><?php
    $xml = simplexml_load_file("note.xml") or die("Error: Cannot create object");
    $item = $xml->xpath('//agents/agent[id=1]')[0];
    if($item!=null){
        print_r($item);
    }else{
        echo "No Records";
    }
?></pre>