【发布时间】:2015-11-09 08:18:59
【问题描述】:
考虑两个同构的 XML 模式。这里的同构是指这两个模式除了属性和标签名称外具有相同的结构。更具体地说,我有一个活生生的例子,比如A,它的副本B,其中所有标签和属性名称都从英语翻译成本国语言。
例如,作为输入,我们可以有一个对象的两种不同变体:
<tag_1_v1>
<tag_2_v1 id="blabla" name="xxxxx">
Some value1
</tag_2_v1>
<tag_3_v1 id="alalala" name="yyyyy">
Some value2
</tag_3_v1>
</tag_1_v1>
和
<tag_1_v2>
<tag_2_v2 special_id_2="blabla" name="xxxxx">
Some value1
</tag_2_v2>
<tag_3_v2 id="alalala" special_name_2="yyyyy">
Some value2
</tag_3_v2>
</tag_1_v2>
问题是将这两个模式映射到单个类结构上,比如说
class Tag1 {
Tag2 tag2;
Tag3 tag3;
}
class Tag2 {
String id;
String name;
String value;
}
class Tag3 {
String id;
String name;
String value;
}
有很多方法可以解决这个问题,但都不是那么方便,因为在同一类结构上使用单个 JAXB 注释方案的任何可能性。它们是:
- 创建两个不同的类集,然后从 一个模式到另一个模式;
- 创建自己的 SAX 解析器实现并将其内部的标签和属性名称“翻译”成适当的名称;
- 使用自己的 XML 预处理器并使用字符串替换(如果 id 和属性名称在所有架构中都不相同,则将不起作用)。
【问题讨论】:
-
我可能会选择选项 2。这听起来像是最不老套的选项。