我正在使用cURL将以下XML发送到api:
$xml = "<request type='auth' timestamp='$timestamp'>
<merchantid>$merchantid</merchantid>
<account>$account</account>
<orderid>$orderid</orderid>
<amount currency='$currency'>$amount</amount>
<card>
<number>$cardnumber</number>
<expdate>$expdate</expdate>
<type>$cardtype</type>
<chname>$cardname</chname>
</card>
<sha1hash>$sha1hash</sha1hash>
</request>";
避免对此XML进行硬编码的最佳方法是什么?我正在考虑使用XMLWriter但看起来很奇怪,因为它不会改变。
我应该使用模板吗?或者使用XMLWriter / Simple XML生成它?
答案 0 :(得分:2)
正如我在评论中提到的,对此并不一定是正确的答案,但我最近还必须编写一个围绕XML API Feed的项目。我决定使用XMLWriter
,并且仍然非常通过使用他们受尊敬的.loadXML()
函数轻松地与其他人交换。
class SomeApi extends XMLwriter {
public function __construct() {
$this->openMemory();
$this->setIndent( true );
$this->setIndentString ( "	" );
$this->startDocument( '1.0', 'UTF-8', 'no' );
$this->startElement( 'root' );
}
public function addNode( $Name, $Contents ) {
$this->startElement( $Name );
$this->writeCData( $Contents );
$this->endElement();
}
public function output() {
$this->endElement();
$this->endDocument();
}
//Returns a String of Xml.
public function render() {
return $this->outputMemory();
}
}
$newRequest = new SomeApi();
$newRequest->addNode( 'some', 'Some Lots of Text' );
$Xml = $newRequest->render();
我认为用PHP编写XML Feed是一种很好的清洁方式,而且还可以添加内部函数,例如:
$this->addHeader();
private function addHeader() {
$this->addNode( 'login', 'xxxxx' );
$this->addNode( 'password', 'xxxxx' );
}
然后添加您将使用的节点&amp;再次。然后,如果您突然需要使用DOMDocument
对象(例如我也需要XSL)。
$Dom = new DOMDocument();
$Dom->loadXML( $Xml );
答案 1 :(得分:0)
我应该使用模板吗?
你实际上已经在这里使用了模板。
使用XMLWriter / Simple XML生成它?
XMLWriter
以及SimpleXMLElement
是允许您轻松创建XML的组件。对于您的具体情况,我将使用SimpleXML开始:
$xml = new SimpleXMLElement('<request type="auth"/>');
$xml['timestamp'] = $timestamp;
$xml->merchantid = $merchantid;
$xml->account = $account;
$xml->orderid = $orderid;
$xml->addChild('amount', $amount)['currency'] = $currency;
$card = $xml->addChild('card');
$card->number = $cardnumber;
$card->expdate = $expdate;
$card->type = $cardtype;
$card->chname = $cardname;
$xml->sha1hash = $sha1hash;
请注意,XML不再是硬编码,只使用名称。 SimpleXML库负责创建XML(demo,这里输出被美化以获得更好的可读性):
<?xml version="1.0"?>
<request type="auth" timestamp="">
<merchantid></merchantid>
<account></account>
<orderid></orderid>
<amount currency=""/>
<card>
<number></number>
<expdate></expdate>
<type></type>
<chname></chname>
</card>
<sha1hash></sha1hash>
</request>
感谢库,输出始终是有效的XML,您无需关心此处的详细信息。您可以通过更多地包装它来进一步简化它,但我不认为这对您在这里的非常小的XML有很大用处。