从XML获取特定部分

时间:2013-05-10 17:42:38

标签: php xml simplexml

我正在尝试获得PAY,其中有ID 3标签电话 但我真的不知道怎么样,我尝试了一切。 谢谢你的帮助!

以下是XML代码:

$books = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
  <login>1</login>
  <arrStatsData>
    <item>
      <Id>500</Id>
      <Label>website_name</Label>
      <Data>
        <item>
          <Id>4</Id>
          <Label>transactions</Label>
          <Data>
            <sum>2029.34</sum>
            <cst>47.67575</cst>
            <num>86</num>
            <avg>23.6</avg>
            <pay>1981.66</pay>
          </Data>
        </item>
        <item>
          <Id>3</Id>
          <Label>Phone</Label>
          <Data>
            <sum>205</sum>
            <cst>17.353</cst>
            <num>205</num>
            <avg>1</avg>
            <pay>187.647</pay>
          </Data>
        </item>

......

PHP代码:

$xml = simplexml_load_string($arrResult); //load xml from above
foreach($xml->arrStatsData->item->Data as $item) 
{
    foreach($item->item as $DATA)
{
       echo $DATA->Id.'<br>';

}

我现在的结果是:

1981.66
187.647
-0.4448

3 个答案:

答案 0 :(得分:2)

由于你知道一些告诉节点与其他节点不同的信息,你可以使用XPath直接获取值而不是遍历所有这些:

<?php
$sxe = new SimpleXMLElement($books);
$pay = $sxe->xpath('//item[./Id=3]/Data/pay');

echo (string) $pay[0];

输出继电器:

187.647

答案 1 :(得分:0)

您的PHP代码如下:

$xml = simplexml_load_string($books);

foreach($xml->arrStatsData->item->Data as $item) 
{
    //echo '$item;';
    foreach($item->item as $DATA)
    {
       if($DATA->Id == '3'){
           echo $DATA->Data->pay."<br/>";
       }
    }
}

当ID等于3时,它会检索付款值。

答案 2 :(得分:0)

Rolando Isidoro推荐xpath的速度更快,我的解决方案略有不同,这也是我发布的原因:

$pay = (string)$xml->xpath("//item[Id = '3']/Data/pay")[0];
echo $pay;

看到它有效:http://codepad.viper-7.com/qzPlmp