从xml节点提取值并添加到php

时间:2018-04-12 04:21:56

标签: php arrays xml loops

我已经搜索了这个特定问题的答案而没有找到答案 - 如果我忽略了某些事情,我很抱歉...这是我的问题......我正在构建两个数据库之间的集成,我是用PHP编码。我从源API获得XML响应,然后需要从该响应中提取特定数据值并将它们添加到数组中,以便通过其API插入到sink数据库中。我可以从源代码获得我需要的数据值,但是当我尝试将它们添加到接收器所需的数组格式时,我得到的数组包含Key / value对而不是值。

这是我用来提取构建数组所需数据的代码的简短片段:

foreach($invoiceResponse->operation->result->data->sodocument as $sodoc){
    $invoice = array("Invoice_ID"=>$sodoc->DOCNO, "Invoice_Date"=>$sodoc->WHENPOSTED)
}

结果数组如下所示:

{"Invoice_ID":{"0":"SI-000525"},"Invoice_Date":{"0":"03\/22\/2018"}}

我想要的是这个:

{"Invoice_ID":"SI-000525","Invoice_Date":"03\/22\/2018"}

以下是来自源代码的xml格式:

<response>
    <control>
        <status>success</status>
    </control>
    <operation>
        <authentication>
            <status>success</status>
            <sessiontimestamp>2018-04-12T08:14:55-07:00</sessiontimestamp>
        </authentication>
        <result>
            <status>success</status>
            <function>readByQuery</function>
            <data listtype="sodocument" count="1" totalcount="1" numremaining="0" resultId="">
                <sodocument>
                    <PROJECT>GER-0318-DIG-005</PROJECT>
                    <CONTACT.COMPANYNAME>FFF Production Service</CONTACT.COMPANYNAME>
                    <TYPE_OF_INVOICE>Bill in Full</TYPE_OF_INVOICE>
                    <WHENPOSTED>04/10/2018</WHENPOSTED>
                    <STATE>Pending</STATE>
                </sodocument>
...

我使用以下方法将xml转换为php中的数组:

$response = simplexml_load_string($xml_response);

我可以在一个简单的语句中提取数据,例如,像这样的一行代码:

$query = "DOCHDRID = '".$sodoc->DOCID."'";

结果

DOCHDRNO = 95

所以这里正确地提取数据,但是当我使用相同的语法将这些值添加到数组时,我遇到了如上所述的问题。

我确信这很简单,但我非常感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

看起来$sodoc->DOCNO$sodoc->WHENPOSTED中有数组,所以在获取数据时抓取第一个索引

foreach($invoiceResponse->operation->result->data->sodocument as $sodoc){
    $invoice = array("Invoice_ID"=>$sodoc->DOCNO[0], "Invoice_Date"=>$sodoc->WHENPOSTED[0])
}