新於一般解析XML和XML ...我工作過的例子,但也有幾件事情我想不通:我目前使用的東西,例如XML解析在PHP - 讓特定值
作爲這個值:
$order->reference = $doc->getElementsByTagName("reference")->item(0)->nodeValue;
我認識到是獲得x的第一次出現的值,它工作正常。
現在,因爲customer
和purchaser
在它們內部具有相同的值,所以我如何定位其中一個或另一個?每個實例最多隻有一個實例。
另外,我預計多個<orderItem>
在<orderItems>
之間...我怎樣才能遍歷這些...最好創建一個像數組一樣,因爲我不知道會有多少。
示例XML:
<order>
<reference/>
<status>open | request | requested | acceptance | accepted | fulfillment | fulfilled | completion | completed | canceled | failed</status>
<statusChanged>2010-08-15T00:00:00.000Z</statusChanged>
<test>true | false</test>
<due>2010-08-15T00:00:00.000Z</due>
<returnStatus>none | partial | full</returnStatus>
<currency/>
<referrer/>
<originIp/>
<total>0.0</total>
<tax>0.0</tax>
<shipping>0.0</shipping>
<sourceName/>
<sourceKey/>
<sourceCampaign/>
<customer>
<firstName/>
<lastName/>
<company/>
<email/>
<phoneNumber/>
</customer>
<purchaser>
<firstName/>
<lastName/>
<company/>
<email/>
<phoneNumber/>
</purchaser>
<address>
<addressLine1/>
<addressLine2/>
<city/>
<region/>
<regionCustom/>
<postalCode/>
<country/>
</address>
<orderItems>
<orderItem>
<productDisplay/>
<productName/>
<quantity>0</quantity>
<subscriptionReference/>
</orderItem>
</orderItems>
<payments>
<payment>
<status>open | request | requested | acceptance | accepted | fulfillment | fulfilled | completion | completed | canceled | failed</status>
<statusChanged>2010-08-15T00:00:00.000Z</statusChanged>
<methodType>paypal | creditcard | test | bank | check | purchase-order | free</methodType>
<declinedReason>internal-error | unsupported-country | expired-card | declined | risk | processor-risk | connection | unknown | cc-address-verification | cc-cvv | voice-auth</declinedReason>
<currency/>
<total>0.0</total>
</payment>
</payments>
</order>
編輯:
獲取沒有錯誤但沒有值的客戶/購買者。
private function parseFsprgOrder($doc) {
//show values coming in
echo '<pre>',print_r($doc, 1),'</pre>';
$order = new FsprgOrder();
$order->reference = $doc->getElementsByTagName("reference")->item(0)->nodeValue;
$order->status = $doc->getElementsByTagName("status")->item(0)->nodeValue;
$order->statusChanged = strtotime($doc->getElementsByTagName("statusChanged")->item(0)->nodeValue);
$order->test = $doc->getElementsByTagName("test")->item(0)->nodeValue;
$order->due = strtotime($doc->getElementsByTagName("due")->item(0)->nodeValue);
$order->returnStatus = $doc->getElementsByTagName("returnStatus")->item(0)->nodeValue;
$order->currency = $doc->getElementsByTagName("currency")->item(0)->nodeValue;
$order->referrer = $doc->getElementsByTagName("referrer")->item(0)->nodeValue;
$order->originIp = $doc->getElementsByTagName("originIp")->item(0)->nodeValue;
$order->total = $doc->getElementsByTagName("total")->item(0)->nodeValue;
$order->tax = $doc->getElementsByTagName("tax")->item(0)->nodeValue;
$order->shipping = $doc->getElementsByTagName("shipping")->item(0)->nodeValue;
$order->sourceName = $doc->getElementsByTagName("sourceName")->item(0)->nodeValue;
$order->sourceKey = $doc->getElementsByTagName("sourceKey")->item(0)->nodeValue;
$order->sourceCampaign = $doc->getElementsByTagName("sourceCampaign")->item(0)->nodeValue;
//customer info
$customerNodes = $doc->getElementsByTagName("customer")->item(0);
if($customerNodes->length > 0)
{
$customer = new FsprgCustomer();
$customer->firstName = $customerNodes->getElementsByTagName("firstName")->item(0)->nodeValue;
$customer->lastName = $customerNodes->getElementsByTagName("lastName")->item(0)->nodeValue;
$customer->company = $customerNodes->getElementsByTagName("company")->item(0)->nodeValue;
$customer->email = $customerNodes->getElementsByTagName("email")->item(0)->nodeValue;
$customer->phoneNumber = $customerNodes->getElementsByTagName("phoneNumber")->item(0)->nodeValue;
$order->customer = $customer;
}
//purchaser info
$purchaserNodes = $doc->getElementsByTagName("purchaser")->item(0);
if($purchaserNodes->length > 0)
{
$purchaser = new FsprgPurchaser();
$purchaser->firstName = $purchaserNodes->getElementsByTagName("firstName")->item(0)->nodeValue;
$purchaser->lastName = $purchaserNodes->getElementsByTagName("lastName")->item(0)->nodeValue;
$purchaser->company = $purchaserNodes->getElementsByTagName("company")->item(0)->nodeValue;
$purchaser->email = $purchaserNodes->getElementsByTagName("email")->item(0)->nodeValue;
$purchaser->phoneNumber = $purchaserNodes->getElementsByTagName("phoneNumber")->item(0)->nodeValue;
$order->purchaser = $purchaser;
}
return $order;
}
class FsprgCustomer {
public $firstName;
public $lastName;
public $company;
public $email;
public $phoneNumber;
}
class FsprgPurchaser {
public $firstName;
public $lastName;
public $company;
public $email;
public $phoneNumber;
}
class FsprgOrder {
public $reference;
public $status;
public $statusChanged;
public $test;
public $due;
public $returnStatus;
public $currency;
public $referrer;
public $originIp;
public $total;
public $tax;
public $shipping;
public $sourceName;
public $sourceKey;
public $sourceCampaign;
}
值要從客戶,購買者和對的OrderItems得到了什麼?你的答案在於你的問題。 – FMQB 2014-08-27 18:07:30
沒有開玩笑...我知道我想要得到什麼...我不知道如何瞄準他們。我看了各種教程,但一切都使用simplexml,我會堅持提供給我的例子。 – user756659 2014-08-27 18:10:20