【问题标题】:Parse PHP using simplexml for field values使用 simplexml 解析 PHP 以获取字段值
【发布时间】:2021-02-09 21:47:46
【问题描述】:

尝试解析以下xml:

<?xml version="1.0"?>
<devices>
<device name="TEMP" index="0" available="1" type="" id="xxx">
<field type="2" max="50" min="-20" niceName="Temperature (C)" value="24.75" key="TempC"/>
<field type="2" max="122" min="-4" niceName="Temperature (F)" value="76.55" key="TempF"/>

并拉取 76.55 的 TempF 值。

这是我正在尝试的代码,但我没有做错事:

$xml = simplexml_load_file('c:\data.xml') or die("Error: Cannot create object");
echo '<h2>Server Temperature</h2>';
$list = $xml->devices;
for ($i = 0; $i < count($list); $i++) {
    echo 'Temp: ' .$list[$i]->TempF[value] . '<br>';

【问题讨论】:

    标签: php xml-parsing simplexml


    【解决方案1】:

    您可以循环 $devices-&gt;device 而不是使用 for 循环

    echo '<h2>Server Temperature</h2>';
    foreach ($xml->device as $device) {
        foreach ($device->field as $field) {
            $att = $field->attributes();
            if ((string)$att->key === "TempF") {
                echo 'Temp: ' . $field->attributes()->value . "<br>";
            }
        }
    }
    

    输出

    <h2>Server Temperature</h2>Temp: 76.55<br>
    

    查看Php demo

    或者如果你想循环所有字段的值,你可以使用xpath:

    echo '<h2>Server Temperature</h2>';
    foreach ($xml->xpath('/devices/device/field[@key="TempF"]/@value') as $value) {
        echo 'Temp: ' . $value . "<br>";
    }
    

    输出

    <h2>Server Temperature</h2>Temp: 76.55<br>
    

    查看另一个Php demo

    【讨论】:

    • 谢谢!但是该代码似乎仍然没有显示数据,只是获取了 h2​​ 文本。
    • @jackstrum 见Temp: 76.55 其中76.55 来自xml
    • @jackstrum 见3v4l.org/FmOWG 我在答案中添加了 2 个演示。
    • 知道了,谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    相关资源
    最近更新 更多