Javaオブジェクト階層からXML文書を構築する必要があります。 JavaクラスとXMLフォーマットの両方が修正されています。だから私はXStreamのようなXMLシリアライザを使うことはできません:それはJavaクラスのXMLフォーマットに基づいています。同様に、JAXBのようなJava XMLバインディング技術は、XMLスキーマからJavaクラスを作成するため動作しません。私は手作業によるアプローチが必要です。JavaでXML文書を簡潔に構築するにはどうすればいいですか?
ローテクなStringBuilderのルートは、脆弱でバグの多いコードになります(私にとっては少なくとも!)。
JAXPやJDOMなどのAPIは、はるかに堅牢なコードになりますが、これはかなり冗長です。
Groovyは、エレガントなMarkupBuilderを持っている:私はピュアJavaで滞在したいけれども
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.records() {
car(name:'HSV Maloo', make:'Holden', year:2006) {
country('Australia')
record(type:'speed', 'Production Pickup Truck with speed of 271kph')
}
car(name:'P50', make:'Peel', year:1962) {
country('Isle of Man')
record(type:'size', 'Smallest Street-Legal Car at 99cm wide and 59 kg')
}
}
他の言語(例えばRuby)は、さらに良いものを持っています。 practicalxmlやJames Murtyのxmlbuilderのように、Java用の新しいXMLビルダーがいくつか存在するようです。
JavaでXML文書を構築するためのより洗練されたアプローチは何ですか?
概要:
とにかくJAXBを使用することをお勧めしました。これは有力な提案だったので、私は現在のJavaBeansとJAXB JavaBeansをマップするためにDozerを使用できます。
thaggieはJIBXを推奨し、CurtainDogとjhericoはバインディング技術が実際に実用的であることに同意します。
StaxManはStaxMateを推奨します。
私が見てきたことの中で、practicalxmlとJames Murtyのxmlbuilderは、最も簡潔なビルダーだと思われますが、かなり新しくなっています。 JAXBのようなバインディング技術は、余分な安全/自動化を提供するようです。主流の選択肢のうち、dom4jはまともなものですが、まだまだ冗長です。
public Document createDocument() {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");
Element author2 = root.addElement("author")
.addAttribute("name", "Toby")
.addAttribute("location", "Germany")
.addText("Tobias Rademacher");
Element author1 = root.addElement("author")
.addAttribute("name", "James")
.addAttribute("location", "UK")
.addText("James Strachan");
return document;
}
は簡潔にするため、あなたは簡潔を提供するために、このAPIの上に薄いファサードをラップすることができます:それは私の好きな「流れるようなインターフェイス」(彼らは一緒に連鎖させることができますので、ミューテータが変異したオブジェクトへの参照を返します)を提供していますこれらのメソッドのいくつかの同義語(例えば、addAttribute()の代わりにattr()など)。
ありがとうございます!
P .: Stephan SchmidtがJavaを手がけたのはMarkupBuilderですが、公開していないようです。
http://dom4j.sourceforge.net/へのdom4jリンクを修正してください:) –
@PawelVeselov - dom4j.orgがどのようにしてcooptedされたかおかげさまです。 –
(O/T)@JimFerrans私はそれがcooptedだとは思わない、彼らはもうdom4jソフトウェアはもう言及していない。それらとdom4jライブラリページの間のページスタイリングは、同じ屋根を持っていないそれらの人のためにあまりにも似ています:) –