【发布时间】:2014-05-30 13:11:40
【问题描述】:
当使用 JAXB 编组到 XML 时,有没有办法自动增加 Collection 的元素名称?我使用以下代码生成 XML:
public void saveTestSettings(final String filename, final DefaultTestSettings t) throws Exception
{
try
{
final Path path = FileSystems.getDefault().getPath((paths.getTestSettingsPath() + filename));
if (Files.notExists(path.getParent()))
throw new Exception(path.getParent().toString() + " does not exist!!");
final OutputStream out = new BufferedOutputStream(Files.newOutputStream(path));
final JAXBContext jaxbContext = JAXBContext.newInstance(DefaultTestSettings.class);
final Marshaller m = jaxbContext.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(t, out);
out.flush();
out.close();
}
catch (JAXBException | IOException e)
{
e.printStackTrace();
throw new Exception(e.getMessage());
}
}
生成的 XML 如下所示:
<defaultTestSettings>
<groups>
<instruments>
<name>A200</name>
</instruments>
<name>A0</name>
</groups>
<groups>
<instruments>
<name>A300</name>
</instruments>
<instruments>
<name>A400</name>
</instruments>
<name>A1</name>
</groups>
</defaultTestSettings>
我希望 groups 和 instruments 自动递增,结果如下所示:
<defaultTestSettings>
<groups1>
<instruments1>
<name>A200</name>
</instruments1>
<name>A0</name>
</groups1>
<groups2>
<instruments1>
<name>A300</name>
</instruments1>
<instruments2>
<name>A400</name>
</instruments2>
<name>A1</name>
</groups2>
</defaultTestSettings>
我对使用 XML 架构不太熟悉,这样行吗?
【问题讨论】:
-
一个有用的契约,但不是列表或数组,不,除了为整个元素组件指定元素名称之外,您没有任何控制权。
-
我建议不要使用自动递增的元素名称。您是否有理由要以这种方式实现它?
-
我同意,但是对解析 XML 文件的其他软件有依赖性。元素必须是唯一的,才能区分各个元素。不幸的是,我无法控制。