【问题标题】:PHP parse xml get specific valuePHP解析xml获取特定值
【发布时间】:2018-08-11 09:04:00
【问题描述】:

我有 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 详细信息,这意味着我想获取“大卫,结婚,汤姆”的详细信息。

怎么做?

感谢您的阅读。

【问题讨论】:

    标签: php xml xml-parsing


    【解决方案1】:

    您始终可以将&lt;emp&gt; 之类的元素视为一个数组,因此一个简单的替代方法是使用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)。

    【讨论】:

      【解决方案2】:

      您可以过滤 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"
      

      【讨论】:

        猜你喜欢
        • 2018-09-15
        • 2021-08-05
        • 1970-01-01
        • 2015-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-19
        • 2020-10-16
        相关资源
        最近更新 更多