Sabre XML Writer - 组重复元素

时间:2016-08-08 13:44:44

标签: php xml serialization

我对saber xml有一点疑问。

我不想为每个想要序列化的PHP类开发硬编码的自定义编写器,所以我使用mapValueObject来告诉SabreXML该怎么做。 不幸的是,我的重复元素没有分组。

我有一个PHP模型,看起来像这样(简化):

class ProductItem包含“Product”类的对象和一个数组,其中包含多个用于多语言的ProductsDescriptions。

class ProductItem extends Model {
  /**
   * @var Product
   */
  var $Product;
  /**
   * @var ProductsDescription[]
   */
  var $descriptions;
}

class Model包含如何序列化扩展类的信息。

abstract Model {
  public function Serialize() {
    $service = new \Sabre\Xml\Service();
    $service->mapValueObject('{}ProductItem', ProductItem::class);
    $service->mapValueObject('{}Product', Product::class);
    $service->mapValueObject('{}ProductsDescription', ProductsDescription::class);
    $xml = $service->writeValueObject($this);
    return $xml;
  }
}

返回的XML如下所示:

<?xml version="1.0"?>
<ProductItem>
  <Product>
    <Id>1234</Id>
    <Stock>100</Stock>
  </Product>
  <descriptions>
    <Language_code>deu</Language_code>
    <Products_name>TestDEU</Products_name>
  </descriptions>
  <descriptions>
    <Language_code>eng</Language_code>
    <Products_name>TestENG</Products_name>
  </descriptions>
</ProductItem>

但我希望它看起来像这样:

<?xml version="1.0"?>
<ProductItem>
  <Product>
    <Id>1234</Id>
    <Stock>100</Stock>
  </Product>
  <descriptions>
    <ProductsDescription>
      <Language_code>deu</Language_code>
      <Products_name>TestDEU</Products_name>
    </ProductsDescription>
    <ProductsDescription>
      <Products<Language_code>eng</Language_code>
      <Products_name>TestENG</Products_name>
    </ProductsDesription>
  </descriptions>
</ProductItem>

有没有办法告诉SabreXML使用mapValueObjects对某个类的重复元素进行分组,还是我必须为我的类ProductItem编写一个自定义序列化器,它将收集所有子节点,将它们设置为一个数组并使用

序列化它们
Sabre\Xml\Serializer\repeatingElements($writer, $collection, 'childname');

功能

0 个答案:

没有答案