名前空間を持つ属性を追加することにスタックしています。どういうわけか名前空間を登録する必要があるように見えますが、まだ答えがわかりません:'(私のxml sholdは次のようになります:
<?xml version="1.0"?>
<WebOrders xmlns="http://microsoft.com/wsdl/types/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<WebOrder WebOrderId="weborder_id" EComChannelId="1" OrderNo="1" OrderDate="2012-08-03 15:17:42">
<DefaultLocation xsi:nil="true"/>
<GlobalDiscountReason GlobalDiscountReasonId="1" GlobalDiscountAmount="0.00"/>
<DefaultShippingMethod ShippingMethodId="shipping_id"/>
</WebOrder>
</WebOrders>
しかし、xsi:nil="true"の部分を追加できません。
<?php
class XmlGeneration
{
public function _construct()
{
header('Content-Type: text/xml');
}
public function generateXml($params)
{
$webOrders = '<WebOrders xmlns="http://microsoft.com/wsdl/types/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"></WebOrders>';
$webOrders = new SimpleXMLElement($webOrders);
$this->generateWebOrder($webOrders);
echo $webOrders->asXML();
}
public function generateWebOrder(&$webOrders)
{
$result = array(
'weborder_id' => 1,
'order_no' => 1,
'order_date' => 1,
'discount_id' => 1,
'discount_amount' => 1,
'shipping_id' => 1,
'location_id' => null
);
foreach($results as $result)
{
$webOrder = $this->createNode($webOrders, 'WebOrder', array('WebOrderId' => $result['weborder_id'], 'EComChannelId' => $this->_channel_id, 'OrderNo' => $result['order_no'], 'OrderDate' => $result['order_date']));
$this->createNode($webOrder, 'DefaultLocation', array('DefaultLocationId' => $result['location_id']));
$this->createNode($webOrder, 'GlobalDiscountReason', array('GlobalDiscountReasonId' => $result['discount_id'], 'GlobalDiscountAmount' => $result['discount_amount']));
$this->createNode($webOrder, 'DefaultShippingMethod', array('ShippingMethodId' => $result['shipping_id']));
}
}
private function createNode(&$parent, $child, $attribute=array())
{
$$child = $parent->addChild($child);
foreach($attribute as $k => $v)
{
if($v)
{
$$child->addAttribute($k, $v);
}
else
{
$$child->addAttribute('nil', 'true', 'xsi');
break;
}
}
return $$child;
}
}
これが私のコードです。名前空間の登録にregisterXPathNamespaceを使用する予定ですが、以前の試行ごとに返されますそれだけ。