簡體   English   中英

使用PHP重新組合/重命名XML

[英]Regroup/rename XML using PHP

我得到了這樣的XML結構:

<OrderLineItems>
<SKU/>
<ItemName>ÁFONYÁS FÁNK</ItemName>
<Quantity>1</Quantity>
<Price>350</Price>
<LineTotal>350</LineTotal>
<Meta/>
</OrderLineItems>
<OrderLineItems>
<SKU/>
<ItemName>CSIRKE SALÁTA ÖNTETTEL</ItemName>
<Quantity>1</Quantity>
<Price>1150</Price>
<LineTotal>1150</LineTotal>
<Meta/>
</OrderLineItems>

我希望這樣輸出:

<basket>
<item> ->OrderLineItems
<billitem_code></billitem_code> -> SKU
<billitem_name></billitem_name>  -> this will be the ItemName
<billitem_amount></billitem_amount> ->Quantity
<billitem_unitprice></billitem_unitprice> ->Price
</item>
</basket>

我已經設法讀取XML並輸出一些基本行

$xml -> customer -> name = $orderxml -> Order -> BillingFullName;

但是如果數量超過1,我將無法查看訂購的商品。

有什么建議如何處理嗎?

當前代碼:

 <?php 
error_reporting(E_ALL);
ini_set('display_errors', '1');
header("Content-type:text/xml");

//Load
require "apiclass/database.php";
define("DEFAULT_XML_FILE",dirname(__FILE__).'/default.xml');

//Database 
$db = new Database;

//get XML
$order_id = $_GET["order_id"];
$order_file = "xml/order_id-".$order_id.".xml";

//XML 
$orderxml = simplexml_load_file($order_file);
$customerid = $orderxml -> Order -> CustomerId;

$xml = simplexml_load_file(DEFAULT_XML_FILE);

//Converting loaded XML to output format
$xml -> customer -> id = $orderxml -> Order -> CustomerId;
$xml -> orderdate = $orderxml -> Order -> OrderDate;
$xml -> customer -> name = $orderxml -> Order -> BillingFullName;
$xml -> customer -> tel = $orderxml -> Order -> BillingPhone;
$xml -> customer -> address -> postalcode = $orderxml -> Order -> BillingPostCode;
$xml -> customer -> address -> city = $orderxml -> Order -> BillingCity;
$xml -> customer -> address -> district = $orderxml -> Order -> BillingState;
$xml -> customer -> address -> street = $orderxml -> Order -> BillingAddress1;
$xml -> customer -> address -> number = $orderxml -> Order -> BillingAddress2;
$xml -> customer -> address -> description = $orderxml -> Order -> CustomerNote;
$xml -> payment_method = $orderxml -> Order -> ShippingMethod;

foreach($orderxml -> Order -> OrderLineItems -> ItemName as $key => $value)
{
$xml -> basket -> item -> billitem_name =  $value ;
}

$xml -> deliveryprice = $orderxml -> Order -> FeeTotal;
$xml -> totalprice = $orderxml -> Order -> OrderTotal;
print $xml -> asXML();

//Debuggolás
//echo '<pre>';
//var_dump($xml);
//echo '</pre>';
?>

轉換XML的最佳方法可能是XSLT ,這是一種將XML文檔轉換為其他XML文檔的語言。 此外,對於導入/轉換節點, DOMDocument比SimpleXML更強大。

使用SimpleXML,可以使用->addChild(name,value)->addChild(name,value)->...

否則,您可以使用把戲 將目標XML模板分為兩部分:

$xmlDefault ='<?xml version="1.0" encoding="utf-8"?>
<basket/>';

$itemTemplate = '<item>
<billitem_code></billitem_code>
<billitem_name></billitem_name>
<billitem_amount></billitem_amount>
<billitem_unitprice></billitem_unitprice>
</item>
';

加載您的源XML文件:

$orderxml       = simplexml_load_file( $order_file );

選擇<OrderLineItems>元素:

$orderLineItems = $orderxml->OrderLineItems;

然后使用相同的<item>$orderLineItems創建新的目標XML:

$newXml = "<basket>\n".str_repeat( $itemTemplate, count( $orderLineItems ) )."</basket>";
$xml = simplexml_load_string( $newXml );

現在,您可以添加每個節點:

$key = 0;
foreach( $orderLineItems as $node )
{
    $xml->item[$key]->billitem_code      = $node->SKU;
    $xml->item[$key]->billitem_name      = $node->ItemName;
    $xml->item[$key]->billitem_amount    = $node->Quantity;
    $xml->item[$key]->billitem_unitprice = $node->Price;
    $key++;
}

$xml最終內容:

<basket>
    <item>
        <billitem_code></billitem_code>
        <billitem_name>ÁFONYÁS FÁNK</billitem_name>
        <billitem_amount>1</billitem_amount>
        <billitem_unitprice>350</billitem_unitprice>
    </item>
    <item>
        <billitem_code></billitem_code>
        <billitem_name>CSIRKE SALÁTA ÖNTETTEL</billitem_name>
        <billitem_amount>1</billitem_amount>
        <billitem_unitprice>1150</billitem_unitprice>
    </item>
</basket>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM