【发布时间】:2018-02-19 11:59:06
【问题描述】:
给定两个 xml 文件,它们具有不同格式的相同信息。两者都应该反序列化为同一个 Symfony 实体:
1.
<?xml version="1.0" encoding="iso-8859-1" ?>
<Request xmlns:dxn="http://defaultxmlnamespace.org" xmlns:axn="http://anotherxmlnamespace.org">
<dxn:Id>123456</dxn:Id>
<axn:Name>JohnDoe</axn:Name>
</Request>
2.
<?xml version="1.0" encoding="iso-8859-1" ?>
<Request xmlns="http://defaultxmlnamespace.org" xmlns:axn="http://anotherxmlnamespace.org">
<Id>123456</Id>
<axn:Name>JohnDoe</axn:Name>
</Request>
在第一个示例中,命名空间使用前缀“dxn”注册,而在第二个示例中,它被设置为默认命名空间。我的实体(没有 getter/setter)看起来像:
private $dxnId;
private $axnName;
我使用“NameConverterInterface”将节点名称从“dxn:Id”转换为“dxnId”,因为冒号不能用于实体元素名称。但这在这两种情况下都不起作用,因为序列化程序仅在示例编号中知道前缀“dxn”。 1.
我现在的解决方法是将数据映射到一个数组并在那里对其进行操作,然后再将其映射到实体。我认为,将命名空间保存在 Entity 元素名称中并不是最好的选择,但我必须保存命名空间信息以供以后序列化。
那么反序列化这种结构的最佳方法是什么?
【问题讨论】:
标签: php xml symfony serialization namespaces