[当使用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>
我不知道我在想什么。谢谢您的帮助。
好,我知道了。
阅读有关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'
]);
现在它产生了我追求的结果。希望这对将来的任何人有帮助。