рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╕реИрдХрдбрд╝реЛрдВ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╕реЗ рджрд╕рд╡реЗрдВ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рддрдХ рдмрдбрд╝реА рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рднрд┐рдиреНрди "рдЧрд╣рд░рд╛рдИ" рдкрд░ рд╕реНрдерд┐рдд рдХреЗрд╡рд▓ рдХреБрдЫ рдЯреИрдЧреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред XSLT "рдорд╛рдереЗ рдореЗрдВ" рд╕реНрдореГрддрд┐ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдЯреВрдЯ рдЧрдпрд╛ред рдореБрдЭреЗ рд╕реНрдЯреНрд░реАрдо рдкрд╛рд░реНрд╕рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдФрд░ рдпрд╛рдж рд░рдЦрдирд╛ рдерд╛ред
рдХрдИ XML рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЙрдбрд▓ рд╣реИрдВред рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдбреЛрдо рдФрд░ рдПрд╕рдПрдПрдХреНрд╕ рд╣реИрдВред
DOM рдкреВрд░реЗ XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкреВрд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред SAX, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрдирдкреБрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░, рдЬрдм рдХреЛрдИ рддрддреНрд╡ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдХреЗ рдХрд╛рд░рдг рдбреЛрдо рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдПрд╕рдПрдПрдХреНрд╕ рдПрдкреАрдЖрдИ рд╣реИрдВрдбрд▓рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрдо рдкрдардиреАрдп рдХреЛрдб рд╣реИред Stax рдПрдХ рд╕реНрдЯреНрд░реАрдо рдкрд╛рд░реНрд╕рд░ (SAX рдХреА рддрд░рд╣) рд╣реИ, рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рдкреБрд▓ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рддрддреНрд╡ рдорд╛рдВрдЧ рдкрд░ рдзрд╛рд░рд╛ рд╕реЗ "рд╣рдЯрд╛" рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдврд╛рдВрдЪреЗ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдФрд░ рд╡рд┐рд╡рд┐рдз рдереЗ, рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдлреА рдЧреИрд░-рддреБрдЪреНрдЫ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JAXB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдбреЗрдЯрд╛ рдПрдирдбреАрдП рджреНрд╡рд╛рд░рд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдФрд░ рдЗрд╕рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ
XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝<data> <dtype_one> <p1>p1_data_1</p1> <p2>p1_data_1</p2> <p3>p1_data_1</p3> <p4>p1_data_1</p4> <p5>p1_data_1</p5> </dtype_one> <dtype_two> <p1>p1_data_2</p1> <p2>p1_data_2</p2> <p3>p1_data_2</p3> <p4>p1_data_2</p4> <p5>p1_data_2</p5> </dtype_two> <WS> <dtype_three> <p1>p1_data_3</p1> <p2>p1_data_3</p2> <p3>p1_data_3</p3> <p4>p1_data_3</p4> <p5>p1_data_3</p5> </dtype_three> </WS> </data>
рдЗрд╕рдореЗрдВ рд╕реЗ рдЖрдкрдХреЛ dtype_one, dtype_two рдФрд░ dtype_three рдЯреИрдЧ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЯреИрдЧ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдирд╛
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд░реВрдкрд░реЗрдЦрд╛ <?xml version="1.0" encoding="UTF-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="data" type="dataType"/> <xs:element name="dtype_one" type="dtype_oneType"/> <xs:element name="dtype_two" type="dtype_twoType"/> <xs:element name="dtype_three" type="dtype_threeType"/> <xs:complexType name="dtype_oneType"> <xs:sequence> <xs:element type="xs:string" name="p1"/> <xs:element type="xs:string" name="p2"/> <xs:element type="xs:string" name="p3"/> <xs:element type="xs:string" name="p4"/> <xs:element type="xs:string" name="p5"/> </xs:sequence> </xs:complexType> <xs:complexType name="dataType"> <xs:sequence> <xs:element type="dtype_oneType" name="dtype_one"/> <xs:element type="dtype_twoType" name="dtype_two"/> <xs:element type="WSType" name="WS"/> </xs:sequence> </xs:complexType> <xs:complexType name="WSType"> <xs:sequence> <xs:element type="dtype_threeType" name="dtype_three"/> </xs:sequence> </xs:complexType> <xs:complexType name="dtype_twoType"> <xs:sequence> <xs:element type="xs:string" name="p1"/> <xs:element type="xs:string" name="p2"/> <xs:element type="xs:string" name="p3"/> <xs:element type="xs:string" name="p4"/> <xs:element type="xs:string" name="p5"/> </xs:sequence> </xs:complexType> <xs:complexType name="dtype_threeType"> <xs:sequence> <xs:element type="xs:string" name="p1"/> <xs:element type="xs:string" name="p2"/> <xs:element type="xs:string" name="p3"/> <xs:element type="xs:string" name="p4"/> <xs:element type="xs:string" name="p5"/> </xs:sequence> </xs:complexType> </xs:schema>
рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЯреИрдЧ рдХреЗ "рддрддреНрд╡" рддрддреНрд╡ рд╣реИрдВ:
<xs:element name="dtype_one" type="dtype_oneType"/> <xs:element name="dtype_two" type="dtype_twoType"/> <xs:element name="dtype_three" type="dtype_threeType"/>
рдпрджрд┐ рдХреЛрдИ рд╕реНрдХреАрдорд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ IDEA рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ xml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ XJC рдХреЗ
рд▓рд┐рдП @XmlRootElement рдПрдиреЛрдЯреЗрд╢рди
рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ
рд▓рд┐рдП рд╣реИ ред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ maven рдЬрд╛ рд░рд╣рд╛ рд╣реИ,
maven-jaxb2-plugin рдХрд╛ рдЙрдкрдпреЛрдЧ
XJC рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдХреАрдорд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА "рддрддреНрд╡" рдХреЗ рд▓рд┐рдП @XmlRootElement рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреЛ
bindings.xjb рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
<jaxb:bindings> <jaxb:globalBindings > <xjc:simple/> </jaxb:globalBindings> </jaxb:bindings>
рдФрд░ рдЗрд╕реЗ
pom.xml рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рд╡реЗрди-рдЬрдХреНрд╕рдм 2-рдкреНрд▓рдЧрдЗрди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
<bindingDirectory>${project.basedir}/xjb</bindingDirectory>
рдЕрдм, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдХреЗ рд▓рд┐рдП,
TagEngine рд╡рд░реНрдЧ
рдЯреИрдЧ рд╣реИрдВрдбрд▓рд░ рдХреА рд╕реВрдЪреА рд╕рдВрдЧреНрд░рд╣реАрдд
рдХрд░рддрд╛ рд╣реИ рдФрд░
рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ :
public void process(InputStream inputStream) throws FileNotFoundException, XMLStreamException, TransformerException {
JAXBProcessor рд╡рд░реНрдЧ рдЪрдпрдирд┐рдд рддрддреНрд╡реЛрдВ рдХреЛ
рдЕрдирдорд░реНрд╢ рдХрд░рддрд╛ рд╣реИред
XSLTProcessor рд╡рд░реНрдЧ XSLT рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд░реНрдЧ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
public class DataOne extends JAXBProcessor<DtypeOne> { private static final String TAG_NAME = "data/dtype_one";
XSLT
DataThreeXSLT рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрджрд╛рд╣рд░рдгред
рд▓реЙрдиреНрдЪ рдЙрджрд╛рд╣рд░рдг (277 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдВрд╕рд╛рдзрди рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИ):
рд╕реНрдХреАрдорд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд┐рдирд╛ JAXB рдЕрдирдорд░рд╢реЙрд▓
рд░рдирдЯрд╛рдЗрдо: 8034ms, 277000015 рдмрд╛рдЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрд┐рдд
рдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА: 80 рдПрдордмреА
рд╕реНрдХреАрдорд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде JAXB рдЕрдирдорд░рд╢рд╛рд▓
рд░рдирдЯрд╛рдЗрдо: 66180ms, 277000015 рдмрд╛рдЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрд┐рдд
рдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА: 56 рдПрдордмреА
XSLT рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рд░рдирдЯрд╛рдЗрдо: 10604ms, 277000015 рдмрд╛рдЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрд┐рдд
рдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА: 231 рдПрдордмреА
рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реИ, рдХреЛрд░реНрд╕ рдХреА рд╡реИрд▓рд┐рдбреЗрд╢рди рдмрд╣реБрдд рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреА рд╣реИред
рдкреБрдирд╢реНрдЪред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдореЙрдХрд┐рдЯреЛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ (рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЬреЙрдХреЙрдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛)ред рдореБрдЭреЗ рдПрдХ рд▓рд╛рдЗрд╡ (рдореЙрдХ) рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЬрд╛рд╕реВрд╕ - рдЕрд╡рд░реЛрдзрди рдХреЙрд▓ рдФрд░ рдЙрдирдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд╕рдВрдж рдЖрдИред
рдкреА рдкреА рдПрд╕ред GitHub рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдбред