将 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:

的根元素内寻址 namepricedescription
$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错误的截图,而是错误本身。