我有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”的详细信息。
如何做到?
感谢您阅读。
答案 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"