我试图从一个变量下的XML获取元素,其中我具有相同的xml树,但是具有另一个xml名称空间前缀。
我有很多相似的元素,而编写3x相同的类或元素并验证其中之一是否为null(避免异常)会很烦人。
使用symfony 2.8,JMS /序列化器1.5.0
XML看起来像这样:
<Dokument xmlns:wnio="http://crd.gov.pl/wzor/2013/12/12/1410/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://crd.gov.pl/wzor/2013/12/12/1410/ http://crd.gov.pl/wzor/2013/12/12/1410/schemat.xsd">
<wnio:OpisDokumentu>
...
</wnio:OpisDokumentu>
...
并这样:
<Dokument xmlns:pos="http://crd.gov.pl/xml/schematy/UPO/2008/05/09/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://crd.gov.pl/wzor/2013/12/12/1410/ http://crd.gov.pl/wzor/2013/12/12/1410/schemat.xsd">
<pos:OpisDokumentu>
...
</pos:OpisDokumentu>
...
现在,我通过生成另一个元素并检查其中一个元素是否不为null来处理此问题。但是为另一个名称空间编写next元素会使我的模型库变得非常庞大。
/**
* @Serializer\Type("MyBundle\Model\OpisDokumentu")
* @Serializer\XmlElement(namespace="http://crd.gov.pl/wzor/2013/12/12/1410/")
* @Serializer\SerializedName("OpisDokument")
* @Serializer\Expose
*/
private $opisDokumentuWnio;
/**
* @Serializer\Type("MyBundle\Model\OpisDokumentu")
* @Serializer\XmlElement(namespace="http://crd.gov.pl/xml/schematy/UPO/2008/05/09/")
* @Serializer\SerializedName("OpisDokument")
* @Serializer\Expose
*/
private $opisDokumentuPos;
...
//getters/setters
在这种情况下,我得到了带有2个变量的对象以及另一个这样的getter / setter:
Dokument:
opisDokumentuWnio: ...
opisDokumentuPos: null
...
仅想实现一个变量,而不管名称空间前缀是否更改:
Dokument:
opisDokumentu: ...
...
答案 0 :(得分:0)
当应用程序必须使用定义非常相似的多个命名空间之一处理输入时,我的建议始终是从使用单个命名空间(通常使用XSLT)将数据转换为通用形式开始,然后对该通用表格进行后续处理。