PHP解析xml获取特定值

时间:2018-08-11 09:04:00

标签: php xml xml-parsing

我有xml之类的

<emps>
    <emp name="john">
        <gender>male</gender>
        <age>20</age>
    </emp>
    <emp name="david">
        <gender>male</gender>
        <age>25</age>
    </emp>
    <emp name="marry">
        <gender>female</gender>
        <age>22</age>
    </emp>
    <emp name="tom">
        <gender>male</gender>
        <age>28</age>
    </emp>
    <emp name="daisy">
        <gender>female</gender>
        <age>24</age>
    </emp>
</emps>

此代码用于获取所有emp细节:

$url = "abcd.xml";
$xml = simplexml_load_file("$url") or die("Error");
foreach($xml->children() as $emp) {
    $name = $emp[name];
    $gender = $emp->gender;
    $age = $emp->age;
    $detail .= $name . $gender . $age;
}

使用该代码,我可以获得所有emp细节。

但是,现在我只想获取xml文件中emp(2)到emp(4)的emp详细信息,这意味着我想获取“ david,marry,tom”的详细信息。

如何做到?

感谢您阅读。

2 个答案:

答案 0 :(得分:0)

您始终可以将<emp>之类的元素视为一个数组,因此一个简单的替代方法是使用for()循环并在之后选择元素。 (请注意,数组元素从0开始,所以第二个元素的for循环从1开始)...

$url = "abcd.xml";
$xml = simplexml_load_file("$url") or die("Error");
$detail = "";
//foreach($xml->children() as $emp) {
for ( $i = 1; $i<4; $i++ )  {
    $emp = $xml->emp[$i];
    $name = $emp['name'];
    $gender = $emp->gender;
    $age = $emp->age;
    $detail .= $name . $gender . $age;
}
echo $detail;

我还修复了一些小问题(在['name']中添加引号并初始化$detail)。

答案 1 :(得分:0)

您可以过滤Xpath中的位置。请注意,Xpath中的位置以1:

开头
foreach($xml->xpath('emp[position() >= 2 and position() <= 4]') as $emp) {
    var_dump((string)$emp['name']);
}

输出:

string(5) "david" 
string(5) "marry" 
string(3) "tom"