【问题标题】:parse xml with php using simplexml_load_string使用 simplexml_load_string 用 php 解析 xml
【发布时间】:2013-12-10 18:28:37
【问题描述】:

我有以下 XML 结果 simplexml_load_string()...

SimpleXMLElement Object ( 
[Email] => xxxx@xxx.com 
[Acount] => 123123123 [Pin] => SimpleXMLElement Object ( ) 
[StartDate] => 20131204 
[EndDate] => 20131204 [XML] => 1 [State] => 1 [Pays] => SimpleXMLElement Object ( )
[Collections] => SimpleXMLElement Object ( 
    [Collection] => Array ( 
        [0] => SimpleXMLElement Object ( [@attributes] => Array ( [Trx_id] => 6200106301 ) [Trx_Date] => 2013-12-04 07:44:04 [Trx_Payment] => 243.00 [Trx_MontoNeto] => 229.45 [Trx_Number] => 42183710 [Trx_PaymentMean] => Pago ) 
        [1] => SimpleXMLElement Object ( [@attributes] => Array ( [Trx_id] => 6200081097 ) [Trx_Date] => 2013-12-04 07:43:58 [Trx_Payment] => 160.00 [Trx_MontoNeto] => 150.47 [Trx_Number] => 42183698 [Trx_PaymentMean] => Pago ) 
        [2] => SimpleXMLElement Object ( [@attributes] => Array ( [Trx_id] => 6200173497 ) [Trx_Date] => 2013-12-04 07:43:25 [Trx_Payment] => 78.00 [Trx_MontoNeto] => 72.42 [Trx_Number] => 42183631 [Trx_PaymentMean] => Pago ) 
) 
[Tickets] => SimpleXMLElement Object ( ) [Receptions] => SimpleXMLElement Object ( ) [Retreats] => SimpleXMLElement Object ( [Retreat] => SimpleXMLElement Object ( [Trx_Date] => 2013-12-04 14:04:36 [Trx_Payment] => 0,000.17 [Trx_MontoNeto] => 0,000.80 [Trx_Number] => 56757 [Trx_RetreatMethod] => bla bla bla [Trx_TypeCodIdentif] => C.U.I.L. [Trx_NumberCodIdentif] => 234234234 [Trx_Bank] => bank. [Trx_Address] => SimpleXMLElement Object ( ) [City] => SimpleXMLElement Object ( ) [Province] => SimpleXMLElement Object ( ) ) ) [Credits] => SimpleXMLElement Object ( ) [Debits] => SimpleXMLElement Object ( ) )

我正在尝试在 foreach 子句中恢复所有元素,例如 Trx_Id、Trx_date 等...

任何人都可以发布代码来做到这一点吗?

我试过了

foreach ($xml->object as $dato) {
    print_r('data ' . $dato->field[2]);
}

但什么都没有……!

更新:!!!

使用以下方法

foreach($xml->Collections->Collection as $result){ 
    print_r('id ' . $result['Trx_id']. '<br>');
    print_r('date ' . $result['Trx_Date']. '<br>');
    print_r('Trx_Payment ' . $result['Trx_Payment']. '<br>');
    print_r('Trx_Number ' . $result['Trx_Number']. '<br>');
    print_r('Trx_PaymentMean ' . $result['Trx_PaymentMean']. '<br>');
    print_r('......<br>');

}    

我可以得到 Trx_id

如你所见

id 6200106301
date 
Trx_Payment 
Trx_Number 
Trx_PaymentMean

请注意结构

[Collections] => SimpleXMLElement Object ( 
    [Collection] => Array ( 
        [0] => SimpleXMLElement Object ( [@attributes] => Array ( [Trx_id] => 6200106301 ) 
            [Trx_Date] => 2013-12-04 07:44:04 [Trx_Payment] => 243.00 
            [Trx_MontoNeto] => 229.45 
            [Trx_Number] => 42183710 
            [Trx_PaymentMean] => Pago ) 

使用 vardump !!...

object(SimpleXMLElement)[1]
  public 'Email' => string 'xxxx@xxxx.com' (length=24)
  public 'Acount' => string 'xxxxx' (length=7)
  public 'Pin' => 
    object(SimpleXMLElement)[2]
  public 'StartDate' => string '20131204' (length=8)
  public 'EndDate' => string '20131204' (length=8)
  public 'XML' => string '1' (length=1)
  public 'State' => string '1' (length=1)
  public 'Pays' => 
    object(SimpleXMLElement)[3]
  public 'Collections' => 
    object(SimpleXMLElement)[4]
      public 'Collection' => 
        array (size=13)
          0 => 
            object(SimpleXMLElement)[10]
              ...
          1 => 
            object(SimpleXMLElement)[11]
              ...
          2 => 

更新 2:

这是使用 Web 浏览器直接调用的纯 XML

This XML file does not appear to have any style information associated with it. The document tree       
is shown below.
<Report>
<Email>xxxxx@dddddd.com</Email>
<Acount>234234234</Acount>
<Pin/>
<StartDate>20131204</StartDate>
<EndDate>20131204</EndDate>
<XML>1</XML>
<State>1</State>
<Pays/>
<Collections>
<Collection Trx_id="123123132">
<Trx_Date>2013-12-04 07:44:04</Trx_Date>
<Trx_Payment>444.00</Trx_Payment>
<Trx_MontoNeto>444.45</Trx_MontoNeto>
<Trx_Number>333333</Trx_Number>
<Trx_PaymentMean>blabla</Trx_PaymentMean>
</Collection>
<Collection Trx_id="34534345">
<Trx_Date>2013-12-04 07:43:58</Trx_Date>
<Trx_Payment>160.00</Trx_Payment>
<Trx_MontoNeto>150.47</Trx_MontoNeto>
<Trx_Number>666666</Trx_Number>
<Trx_PaymentMean>blabla2</Trx_PaymentMean>
</Collection>

【问题讨论】:

  • $dato-&gt;Email 而不是 $dato-&gt;field[2]
  • $dato->Collections->Collection[0]->Trx_id ,这将让你开始,var_dump 它你去。
  • 我只是更新帖子...罪过使用一条评论我可以迈出一步但我无法开始工作!

标签: php xml parsing


【解决方案1】:

未测试:

$collections = $xml->xpath("//Collection");
foreach($collection as $collection) {
    $id = $collection['Trx_id'];
    $date = $collection->Trx_Date . '';
    $payment = $collection->Trx_PaymentMean . '';
    ...
}

【讨论】:

  • 是的......但似乎 Trx_Id 它只是一个位置的数组?我无法弄清楚它的结构以及如何轻松访问数据。
  • @Ppp 也提供你的 XML
  • Samy 请检查我发布纯 xml 的更新 2!
  • 好的,有了这个结构,你只能访问Trx_id作为属性,因为其他都是孩子...我更新了我的代码,请检查。
猜你喜欢
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 2011-04-16
  • 1970-01-01
  • 2010-11-10
  • 2016-03-08
相关资源
最近更新 更多