将 xml 数据发送到产品 Prestashop
Send xml data into a product Prestashop
我通常自己搜索,但我找不到关于这个主题的文档,所以我有点迷路了
这是我的问题,我需要在产品中发送 xml 中的名称、价格、描述,但是价格是空的,请问我是否有正确的方法?
$file = file_get_contents('php://input');
$xml = simplexml_load_file($file);
$dom = new DOMDocument;
$product = new Product($xml->id);
$product->name = $xml->name;
$product->price = $xml->price;
$product->description = $xml->description;
$product->save();
$id = $dom->createElement('id', "$xml->id");
$name = $dom->createElement('name', "$xml->name");
$price = $dom->createElement('price', "$xml->price");
$description = $dom->createElement('description', "$xml->description");
$dom->appendChild($id);
$dom->appendChild($name);
$dom->appendChild($price);
$dom->appendChild($description);
$dom->formatOutput = true;
$dom->save($file);
$this->output .= $product->id;
我的 XML :
<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<Product>
<name>Test Post</name>
<price>23.900000</price>
<description>test descriptin pour envoie</description>
</Product>
</prestashop>
Error in Postman
谢谢!
返回的错误是对象模型抱怨缺少产品价格。这是由于未正确寻址相应的 XML 元素层次结构造成的。
这是错误的,因为它直接在 XML:
的根元素内寻址 name
、price
和 description
$product->name = $xml->name;
$product->price = $xml->price;
$product->description = $xml->description;
所有这些都在 Product
元素内;所以你需要相应地解决这些问题:
/** @var SimpleXMLElement|false The Product element inside the XML */
$xmlProduct = $xml->Product;
// Product element must exist and price is mandatory for a Product object
if ( false !== $xmlProduct && false !== $xmlProduct->price) {
$product->name = $xmlProduct->name ? $xmlProduct->name : 'Unnamed Product';
$product->price = $xmlProduct->price;
$product->description = $xmlProduct->description? $xmlProduct->description : null;
$product->save();
}
填充 DOM 时出现类似问题,您没有正确创建元素层次结构。它需要看起来像:
$dom = new DOMDocument;
// Create a new Product element for the new DOMDocument
$productElement = $dom->createElement('Product');
// Assuming the source Product elements and its price are correctly defined
$idElement = $dom->createElement('id', "$xml->Product->id");
$productElement->appendChild($idElement);
$nameElement = $dom->createElement('name', "$xml->Product->name");
$productElement->appendChild($nameElement);
$priceElement = $dom->createElement('price', "$xml->Product->price");
$productElement->appendChild($priceElement);
$descriptionElement = $dom->createElement('description', "$xml->Product->description");
$productElement->appendChild($descriptionElement);
// Create the main $prestashopElement
$prestashopElement = $dom->createElement('prestashop');
// Then attach the $productElement itself to the main $prestashopElement
$prestashopElement->appendChild($productElement);
// Then finally attach the main $prestaShop element to the $dom document
$dom->appendChild($prestashopElement);
不清楚为什么您使用简单xml加载文档,然后从DOM文档切换到更低级别API以创建新的DOM稍后用于覆盖 $file
.
的文档
如果您只是希望更新现有的 xml 文档,那么所有这些都是完全不合适的。但是对于这里的单个 post 来说,这些问题太多了。
因此,如果您需要进一步的帮助,请为每个特定问题创建一个 post。
另外请,下次不要post错误的截图,而是错误本身。
我通常自己搜索,但我找不到关于这个主题的文档,所以我有点迷路了 这是我的问题,我需要在产品中发送 xml 中的名称、价格、描述,但是价格是空的,请问我是否有正确的方法?
$file = file_get_contents('php://input');
$xml = simplexml_load_file($file);
$dom = new DOMDocument;
$product = new Product($xml->id);
$product->name = $xml->name;
$product->price = $xml->price;
$product->description = $xml->description;
$product->save();
$id = $dom->createElement('id', "$xml->id");
$name = $dom->createElement('name', "$xml->name");
$price = $dom->createElement('price', "$xml->price");
$description = $dom->createElement('description', "$xml->description");
$dom->appendChild($id);
$dom->appendChild($name);
$dom->appendChild($price);
$dom->appendChild($description);
$dom->formatOutput = true;
$dom->save($file);
$this->output .= $product->id;
我的 XML :
<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<Product>
<name>Test Post</name>
<price>23.900000</price>
<description>test descriptin pour envoie</description>
</Product>
</prestashop>
Error in Postman
谢谢!
返回的错误是对象模型抱怨缺少产品价格。这是由于未正确寻址相应的 XML 元素层次结构造成的。
这是错误的,因为它直接在 XML:
的根元素内寻址name
、price
和 description
$product->name = $xml->name;
$product->price = $xml->price;
$product->description = $xml->description;
所有这些都在 Product
元素内;所以你需要相应地解决这些问题:
/** @var SimpleXMLElement|false The Product element inside the XML */
$xmlProduct = $xml->Product;
// Product element must exist and price is mandatory for a Product object
if ( false !== $xmlProduct && false !== $xmlProduct->price) {
$product->name = $xmlProduct->name ? $xmlProduct->name : 'Unnamed Product';
$product->price = $xmlProduct->price;
$product->description = $xmlProduct->description? $xmlProduct->description : null;
$product->save();
}
填充 DOM 时出现类似问题,您没有正确创建元素层次结构。它需要看起来像:
$dom = new DOMDocument;
// Create a new Product element for the new DOMDocument
$productElement = $dom->createElement('Product');
// Assuming the source Product elements and its price are correctly defined
$idElement = $dom->createElement('id', "$xml->Product->id");
$productElement->appendChild($idElement);
$nameElement = $dom->createElement('name', "$xml->Product->name");
$productElement->appendChild($nameElement);
$priceElement = $dom->createElement('price', "$xml->Product->price");
$productElement->appendChild($priceElement);
$descriptionElement = $dom->createElement('description', "$xml->Product->description");
$productElement->appendChild($descriptionElement);
// Create the main $prestashopElement
$prestashopElement = $dom->createElement('prestashop');
// Then attach the $productElement itself to the main $prestashopElement
$prestashopElement->appendChild($productElement);
// Then finally attach the main $prestaShop element to the $dom document
$dom->appendChild($prestashopElement);
不清楚为什么您使用简单xml加载文档,然后从DOM文档切换到更低级别API以创建新的DOM稍后用于覆盖 $file
.
如果您只是希望更新现有的 xml 文档,那么所有这些都是完全不合适的。但是对于这里的单个 post 来说,这些问题太多了。
因此,如果您需要进一步的帮助,请为每个特定问题创建一个 post。
另外请,下次不要post错误的截图,而是错误本身。