æšæ¥ããã¡ãã®ã®ããã°ã§èŠãããããããªãšã³ããªã
JDOM2ã§XMLãã¡ã€ã«ãåºåããŠã¿ã
http://kikutaro777.hatenablog.com/entry/2013/09/04/215134
Javaã§XMLãåºåããæ¹æ³ãæ¢ãããŠãããããªã®ã§ããã䜿ãããŠããã©ã€ãã©ãªãJDOMã ã£ãã®ã§ãæããTwitterã§ããããã€ã¶ãããŠããŸããŸããã
JDOMã¯ãJavaã«ãããDOMã®ä»£æ¿ã§ãããèªåã¯JDOMããŸã βçã®é ãã䜿ã£ãŠããããªããã€Javaã®ã©ã€ãã©ãªã§åããŠæ±ã£ããã®ã ã£ãã®ã§éåžžã«ææ šæ·±ãâŠãã€ã
ã§ããã£ãããªã®ã§ãJavaã§XMLãåºåããããšããæ¹æ³ã«ã€ããŠãæ®æ®µèªåã䜿ãæ¹æ³ã3ã€ã»ã©æããããšæããŸãã
ä»åã¯ãå ã®ããã°ã§ç®æšãšãããŠããã
<?xml version="1.0" encoding="UTF-8"?> <Product> <Option Id="Opt"> <Name> <JPN>ãªãã·ã§ã³å</JPN> <ENG>Option Item</ENG> </Name> </Option> <!-- Optionã¿ã°ã®ç¹°ãè¿ã --> </Product>
ãšããæãã®XMLãåºåãããã®ãšããŸããOptionã®IdãJPNãENGã®å€ã«ã¯å®éã«ã¯é£çªãå«ããããã§ãã
DOMããªãŒã䜿ãã©ã€ãã©ãªã䜿çšãã
JDOMã¯ããã®ãã¿ãŒã³ã«ããããŸãã
JDOM
http://www.jdom.org/
JDOM2 A Primer
https://github.com/hunterhacker/jdom/wiki/JDOM2-A-Primer
ææ°çã¯ãJDOM2ããªãªãŒã¹ãç¥ããªãã£ãã§ãâŠã
é¡äŒŒã®ãã®ãšããŠã¯ãJavaæšæºã ãšDOMãå€éšã©ã€ãã©ãªãšããŠã¯dom4jããããŸãã
dom4j
http://dom4j.sourceforge.net/
ã§ã¯ãJDOMã®äŸãã
MavenäŸåé¢ä¿ã
<dependency> <groupId>org.jdom</groupId> <artifactId>jdom2</artifactId> <version>2.0.5</version> </dependency>
ã³ãŒãäŸã
import java.io.IOException; import org.jdom2.Attribute; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; import org.jdom2.output.DOMOutputter; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; public class JdomExample { public static void main(String[] args) { Element product = new Element("Product"); Document document = new Document(product); for (int i = 0; i < 5; i++) { Element option = new Element("Option") .setAttribute("Id", "Opt" + i); product.addContent(option); Element name = new Element("Name"); option.addContent(name); name.addContent(new Element("JPN").setText("ãªãã·ã§ã³å" + i)); name.addContent(new Element("ENG").setText("Option Item" + i)); } try { XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); outputter.output(document, System.out); } catch (IOException e) { e.printStackTrace(); } try { DOMOutputter domOutputter = new DOMOutputter(); org.w3c.dom.Document dom = domOutputter.output(document); } catch (JDOMException e) { e.printStackTrace(); } } }
å ã®ããã°ã®ã³ãŒããšã倧差ãããŸããã
æåŸã«ãDOMã«å€æããã³ãŒããå ããŠããŸãã
DOMOutputter domOutputter = new DOMOutputter();
org.w3c.dom.Document dom = domOutputter.output(document);
ãŸããDOMãšçžäºéçšã§ããŸããã£ãŠããšã§ã
DOMã«æ¯ã¹ãŠã®åªäœæ§ã¯ã
- ã¡ã¢ãªäœ¿çšéãå°ãªã
- Javaã®Collectionã䜿ããïŒNodeListãªã©ã¯ãCollectionã§ã¯ãªãïŒ
- DOMã®ããã«ãNodeã€ã³ã¿ãŒãã§ãŒã¹ããã®ããŠã³ãã£ã¹ããïŒããŸãïŒæ±ããããªã
ãšãããšããã§ããããã
äžå©ãªãšããã¯ãã¯ãæšæºAPIã§ã¯ãªãã®ã§ãDOMã«å€æå¯èœãã©ãããšããç¹ã¯ã¡ãã£ãšæ°ã«ãªããšããã§ãã
ããæ¯èŒãããdom4jã®æ¹ãé«æ©èœãªã®ã§ãããå人çã«ã¯JDOMããã䜿ããŸããJDOMã¯2ã«ãªã£ãŠãžã§ããªã¯ã¹ããµããŒãããããã«ãªã£ãŠããã®ã§ããã®ç¹ãå¬ãããšããã§ãã
ä»åæããæ¹æ³ã§ã¯ããã£ãšãããªããã£ããªæ段ã«ãªãã®ã§ãæè¿ã¯åŸè¿°ããJAXBãªã©ã䜿ãããšãå€ãã§ãã
DOMãJDOMãdom4jãªã©ã䜿çšããæã¯ãå人çã«ã¯
- ããŸããŸãªæ§é ã®XMLãæ±ããããæ±çšçã«åŠçãæžããã
- XPathãªã©ã䜿ããã
- JAXBãªã©ã®ãããã³ã°ç³»ã䜿ãã«ã¯ããªãŒããŒã¹ããã¯ã«æãã
ãšãã£ãæã«äœ¿ãããã«ããŠããŸãã
ã¡ãªã¿ã«ãJavaæšæºAPIã ãšStAXã䜿ã£ãŠãXMLãåºåã§ããŸãããããããããã«é¢åã ãšæããŸãâŠã
XMLãšãªããžã§ã¯ãããããã³ã°ãã
ããŒã¿ããŒã¹ãšã®OïŒRãããã³ã°çãªãã®ã«ãªããŸããããã¯ãJavaæšæºã§å ¥ã£ãŠããJAXBããã䜿ããŸãã
ãšããã«ãããXStreamããããã
XStream
http://xstream.codehaus.org/
ä»åã¯ãJAXBã§ã
JAXBã«ã€ããŠã¯ã以åãšã³ããªãæžããããšããããŸãã
JAXBãXML Schemaãªãã§äœ¿ã£ãŠã¿ã
http://d.hatena.ne.jp/Kazuhira/20120716/1342435297
æšæºAPIãªã®ã§ãMavenäŸåé¢ä¿ã¯äžèŠã§ãã
ã§ã¯ãã³ãŒããã
import java.util.ArrayList; import java.util.List; import javax.xml.bind.DataBindingException; import javax.xml.bind.JAXB; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElements; import javax.xml.bind.annotation.XmlValue; import javax.xml.bind.annotation.XmlRootElement; public class JaxbExample { public static void main(String[] args) { Product product = new Product(); for (int i = 0; i < 5; i++) { Option option = new Option("Opt" + i); option .name .addLang(new Jpn("ãªãã·ã§ã³å" + i)) .addLang(new Eng("Option Item" + i)); product.options.add(option); } JAXB.marshal(product, System.out); } } @XmlRootElement(name = "Product") class Product { @XmlElement(name = "Option") List<Option> options = new ArrayList<>(); } @XmlAccessorType(XmlAccessType.FIELD) class Option { @XmlAttribute(name = "Id") String id; @XmlElement(name = "Name") Name name = new Name(); Option(String id) { this.id = id; } } @XmlAccessorType(XmlAccessType.FIELD) class Name { @XmlElements({@XmlElement(name = "JPN", type = Jpn.class), @XmlElement(name = "ENG", type = Eng.class)}) List<Lang> langs = new ArrayList<>(); public Name addLang(Lang lang) { langs.add(lang); return this; } } @XmlAccessorType(XmlAccessType.FIELD) abstract class Lang { @XmlValue String value; Lang(String value) { this.value = value; } } class Jpn extends Lang { Jpn(String value) { super(value); } } class Eng extends Lang { Eng(String value) { super(value); } }
âŠå®ã¯ããã£ã¡ã¯ãã£ããåä»ã§ãããJPNãENGã¿ã°ãšããååšããã£ãã埮åŠã§ããã£ãšããã¯ããã¡ãã£ãšèšèªããšã«å¢ããããããã ãããªããšãäºæ³ããŠã¿ããšãã ãã¶åé·æãã£ã·ããªæãã«ïŒç¬ïŒãListã«ããªãã£ãå Žåã¯ãJPNãšãENGã®åäœã§ãã£ãŒã«ãå®çŸ©ãšãããã矜ç®ã«ãªãããããªãããšã
ãªããžã§ã¯ããçµããšããèªäœã¯DOMç³»ã«æ¯ã¹ããšãã£ããããŸãããããšã¯ã©ãã ãç°¡åã«ãããã³ã°å ã®ã¯ã©ã¹ãæžããããšãããšããã§ããããã
ãã®æã®ã©ã€ãã©ãªã¯ãçµå±ã¯ã©ã¹ã®å®çŸ©ã§XMLã®æ§é ã決ãŸã£ãŠããŸãã®ã§ãXMLã®å®çŸ©ãå®å šã«æ±ºå®ããŠããŠããªããã€ããçšåºŠãããã³ã°é ç®ãããå Žåã«äœ¿ã£ãŠããŸãã
èªã¿èŸŒã¿æã®æ§èœãæ°ã«ãªãæãšãã¯ããŸãå¥ã§ããã
ä»åã®äŸã ãšãå®å šã«DOMç³»ã®æ¹ãç°¡åã§ããâŠã
ãã³ãã¬ãŒããšã³ãžã³ã䜿ã
å¥ã«XMLã«é¢ããAPIã䜿ããªããŠããXMLã¯åºåã§ããŸãããšããããšã§ãæã 䜿ãã®ããã³ãã¬ãŒããšã³ãžã³ã
倧æµã¯ãFreeMarkerãVelocityã䜿ããŸãã
FreeMarker
http://freemarker.org/
Apache Velocity
http://velocity.apache.org/
ä»åã¯ãFreeMarkerã䜿çšããŸãã
MavenäŸåé¢ä¿ã
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.20</version> </dependency>
Javaã³ãŒãã
import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import freemarker.cache.StringTemplateLoader; import freemarker.cache.ClassTemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; public class FreeMarkerExample { public static void main(String[] args) { Configuration configuration = new Configuration(); configuration.setNumberFormat("###"); configuration.setTemplateLoader(new ClassTemplateLoader(FreeMarkerExample.class, "")); Map<String, Object> options = new LinkedHashMap<>(); for (int i = 0; i < 5; i++) { List<Map<String, String>> langs = new ArrayList<>(); Map<String, String> jpn = new LinkedHashMap<>(); jpn.put("JPN", "ãªãã·ã§ã³å" + i); langs.add(jpn); Map<String, String> eng = new LinkedHashMap<>(); eng.put("ENG", "Option Item" + i); langs.add(eng); options.put("Opt" + i, langs); } Map<String, Object> context = new LinkedHashMap<>(); context.put("options", options); try { Template template = configuration.getTemplate("template.ftl"); StringWriter writer = new StringWriter(); template.process(context, writer); System.out.println(writer); } catch (IOException | TemplateException e) { e.printStackTrace(); } } }
ä»åã®ããŒã¿æ§é ã¯ããã¹ãŠMapãšListã§è¡šçŸããŸããã
ãã³ãã¬ãŒããšã³ãžã³ãªã®ã§ããã³ãã¬ãŒããå¿ èŠã§ããä»åã¯ã¯ã©ã¹ãã¹äžã«ãã³ãã¬ãŒãã眮ããŸããã
<?xml version="1.0" encoding="UTF-8"?> <Product> <#list options?keys as optionId> <Option id="${optionId?xml}"> <Name> <#list options[optionId] as lang> <#list lang?keys as name> <${name}>${lang[name]?xml}</${name}> </#list> </#list> </Name> </Option> </#list> </Product>
èšæ³ãããããªãã«èŠããã°ããŸã楜ã§ããå©çšããã·ãŒã³ã¯ãã£ããDOMç³»ãšãã¶ãã®ã§ããã
- XMLèªäœã«ãããã³ã°ããããŒã¿æ§é ã¯ãå²ãšæ±çšçã«äœããã
- ã§ããè€éãªããŒã¿æ§é ãããªã
- çµæã®XMLå®çŸ©ã¯ãã³ãã¬ãŒãå®çŸ©ã§ãæè»ã«å€æŽããã
- ïŒãããŸããããŸãããïŒãã³ãã¬ãŒãäžã§ãå°ãåŠçãæã¿ãã
ã¿ãããªæã«äœ¿ã£ãŠããŸãã
ç¹ã«ãXMLå®çŸ©ãèªåãããªããŠå¥ã®äººã«äœã£ãŠããããããªæã«äœ¿ããã¡ã§ãããâŠããSELECTæã®çµæããã³ãã¬ãŒãã«å ¥ããšãã®ã§ãããšã¯ãã³ãã¬ãŒãã§å¥œãã«æŽåœ¢ããŠãïŒãã¿ãããªæãã§ããããã
ä»å玹ä»ããŠããäŸã§ãå¯äžXMLã®èªã¿èŸŒã¿æ©èœããªãæ¹æ³ã§ãïŒç¬ïŒã
泚æç¹ãšããŠã¯ã劥åœãªXMLã§ããããšããã³ãã¬ãŒããšã³ãžã³ã¯ä¿éããŠãããªãã®ã§ãã¡ãããšç¢ºèªããå¿ èŠãããããšãšãXMLãšã¹ã±ãŒããå¿ããªãããšãã§ããããã
ã ãããããã䜿ãã®ã¯ãããªæãã§ããã