Symfony序列化器XML将自定义属性添加到根节点

问题描述 投票:2回答:1

[当使用Serializer组件生成XML文件时(在Symfony4中),我想向根节点添加一个自定义属性,但是我不知道该怎么做。

docs提到如何命名根节点,但没有如何添加自定义属性。

为我服务:

use Symfony\Component\Serializer\Serializer;
// ..

// $this->serializer is auto-wired
$this->serializer->serialize($myEntityObjectToSerialize, 'xml', [
  'xml_format_output' => true,
  'xml_encoding' => 'utf-8',
  'xml_root_node_name' => 'document'
]);

此生成:

<?xml version="1.0" encoding="utf-8"?>
<document>
// ...
</document>

但是我想要这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<document id="123" lang="Eng">
// ...
</document>

我不知道我在想什么。谢谢您的帮助。

xml symfony symfony4 xmlserializer
1个回答
0
投票

好,我知道了。

阅读有关XmlEncoder的更多信息,我看到为了将属性添加到节点,请使用@符号和#作为值。

由于serialize()自动创建根节点并将其包装在我实体的数据周围,所以我只需要先将其与我的实体一起定义,然后将其传递给serialize方法,如下所示:

$rootNode = [
  '@id' => 12345,
  '@lang' => 'Eng',
  '#' => $myEntityObjectToSerialize
]

// $this->serializer is auto-wired
$this->serializer->serialize($rootNode, 'xml', [
  'xml_format_output' => true,
  'xml_encoding' => 'utf-8',
  'xml_root_node_name' => 'document'
]);

现在它产生了我追求的结果。希望这对将来的任何人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.