Betwixt 提供 JavaBean 與 XML 的直觀映射,支援屬性/元素輸出、命名策略自定義、pretty-print 格式化,適合配置文件生成、數據交換場景。
<dependency>
<groupId>commons-betwixt</groupId>
<artifactId>commons-betwixt</artifactId>
<version>0.8</version>
</dependency>
public class Music {
private String name;
private String mp3File;
// Getter/Setter 省略
}
Music music = new Music();
music.setName("music_name");
music.setMp3File("music_mp3file");
Writer writer = new FileWriter("e:/test.xml");
BeanWriter beanWriter = new BeanWriter(writer);
// 配置選項
beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false); // 子元素模式
beanWriter.getBindingConfiguration().setMapIDs(false); // 不輸出 id 屬性
beanWriter.enablePrettyPrint(); // 縮進格式化
beanWriter.setEndTagForEmptyElement(true); // 空元素完整閉合
beanWriter.setIndent(" "); // 兩空格縮進
beanWriter.writeXmlDeclaration("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
beanWriter.write("Msg", music); // 根元素名 Msg
writer.close();
<?xml version="1.0" encoding="UTF-8" ?>
<Msg>
<name>music_name</name>
<mp3File>music_mp3file</mp3File>
</Msg>
NameMapper)控制 XML 元素/屬性名稱大小寫與分隔符:
// 小寫開頭 (JavaBean 慣例)
beanWriter.getXMLIntrospector().getConfiguration().setElementNameMapper(new DecapitalizeNameMapper());
// 大寫開頭
beanWriter.getXMLIntrospector().getConfiguration().setElementNameMapper(new CapitalizeNameMapper());
// 連字符分隔: mp3File → mp3-file
HyphenatedNameMapper mapper = new HyphenatedNameMapper();
mapper.setUpperCase(true); // 首字母大寫: Mp3-File
beanWriter.getXMLIntrospector().getConfiguration().setElementNameMapper(mapper);
NameMapperpublic class ItsANameMapper implements NameMapper {
public String mapName(String name) {
// 自定義邏輯,如加前綴、轉蛇形命名等
return "custom_" + name.toLowerCase();
}
}
BeanReader beanReader = new BeanReader();
beanReader.registerBeanClass("Music", Music.class);
Music music = (Music) beanReader.parse(new FileInputStream("test.xml"));
BeanWriter / BeanReader 核心類