2017-04-12 55 views
1

我的XML文件是这样的:的getElementsByTagName,Retrieiving从的nodeValue具体的nodeValue有多个值

<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 

沿着同理,我可以用

foreach ($doc->getElementsByTagName("Charge") as $values) { { 
    $result[] = $values->nodeValue; 
} 
} 

输出使这些nodeValues数组是

Array 
(
    [0] => 

     SHIPPING 

     Shipping 

     8.9500 


    [1] => 

     TAX 

     Sales Tax 

     0.0000 


) 

这些子节点困惑我,因为他们不是在个别的nodeValue的,如在阵列中看到。它们实际上都是一个nodeValue。

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

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

回答

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, 
    ); 
} 
+0

在原始的ForEach中的' - > getElementsByTagName'作为关键字?真棒,没有想到这一点,是有道理的..完美地输出一个很好的数组,每个很容易解析。 –

+0

@BrianBruman很高兴这有帮助 – Ghost