getElementsByTagName,从nodeValue中检索具有多个Value的特定nodeValue

时间:2017-04-12 02:22:45

标签: php arrays dom

我的XML文件如下所示:

<Charge ID="01010101">

    <Type>SHIPPING</Type>

    <Description>Shipping</Description>

    <Amount>8.9500</Amount>

</Charge>

<Charge ID="10101010">

    <Type>TAX</Type>

    <Description>Sales Tax</Description>

    <Amount>0.0000</Amount>

</Charge>

我可以用这个

制作一个数组
$getcharge = $doc->getElementsByTagName("Charge");

$array = array();
foreach ($getcharge as $node) {
$array[] = $node;
}

使用print_r我可以看到nodeValue的构造方式与此类似

[nodeValue] => 

    SHIPPING

    Shipping

    8.9500

同样,我可以使用

从这些nodeValues创建一个数组
foreach ($doc->getElementsByTagName("Charge") as $values) { {
    $result[] = $values->nodeValue;
}
}

输出

Array
(
    [0] => 

        SHIPPING

        Shipping

        8.9500


    [1] => 

        TAX

        Sales Tax

        0.0000


)

这些子节点让我感到困惑,因为它们不在单个nodeValue中,如数组中所示。它们实际上都是一个nodeValue。

我要做的就是循环Charge并将<Type></Type><Amount></Amount>变为变量。

如何在具有多个属性的nodeValue中获取TypeAmount的单个实例?

1 个答案:

答案 0 :(得分:1)

要获得每项费用中的这些类型,金额,描述的批量,您已经可以使用$values作为上下文,您也可以再次使用方法->getElementsByTagName。例如:

foreach ($doc->getElementsByTagName("Charge") as $values) {
    // $values as each `Charge`
    $result[] = array(
        'id' => $values->getAttribute('ID'),
        'type' => $values->getElementsByTagName('Type')->item(0)->nodeValue,
        'description' => $values->getElementsByTagName('Description')->item(0)->nodeValue,
        'amount' => $values->getElementsByTagName('Amount')->item(0)->nodeValue,
    );
}