0

我正在尝试获得具有 ID 3 的 PAY,其中显示标签电话,但我真的不知道如何,我尝试了所有方法。感谢您的帮助!

这是 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
4

3 回答 3

2

由于您知道一些将节点与其他节点区分开来的信息,因此您可以使用 XPath 直接获取值,而不是遍历所有节点:

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

echo (string) $pay[0];

输出:

187.647
于 2013-05-10T18:52:26.393 回答
0

Rolando Isidoro was faster to recommend xpath, my solution is slightly different, that's why I post it, too:

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

see it working: http://codepad.viper-7.com/qzPlmp

于 2013-05-10T19:20:26.637 回答
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 时检索支付值。

于 2013-05-10T18:30:26.353 回答