我有一個(gè)基于XSD的嵌套XML結(jié)構(gòu)。我使用JAXB進(jìn)行編組(只讀)。通常,我需要在大型結(jié)構(gòu)的某處找到一個(gè)或多個(gè)元素。為了避免每次需要搜索時(shí)都遍歷結(jié)構(gòu),我想添加一個(gè)帶有內(nèi)部緩存的優(yōu)化搜索功能。定義它的最佳方法是什么?不同方式的優(yōu)點(diǎn)/缺點(diǎn)是什么?我最初想到使用Facade或適配器,其中adaper類訪問(wèn)生成的類并根據(jù)需要添加方法。但是我想提出建議。作為一個(gè)(略)簡(jiǎn)化的示例,需要搜索基于此XSD的XML,以查找具有特定“ boq”元素的“ step”類型的Elements:<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="test"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" ref="group"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="group"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" ref="step"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="step"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" ref="number"/> <xs:element ref="name"/> <xs:element ref="type"/> <xs:element ref="target"/> <xs:sequence minOccurs="0"> <xs:element ref="boq"/> <xs:element ref="remote"/> </xs:sequence> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="number" type="xs:integer"/> <xs:element name="name" type="xs:NCName"/> <xs:element name="type" type="xs:NCName"/> <xs:element name="target" type="xs:NCName"/> <xs:element name="boq" type="xs:string"/> <xs:element name="remote" type="xs:string"/></xs:schema>該模式已使用JAXB進(jìn)行了編譯,因此我得到了幾個(gè)類。使用解組功能,我在內(nèi)存中擁有訪問(wèn)XML的數(shù)據(jù)結(jié)構(gòu)?,F(xiàn)在考慮,我需要一個(gè)優(yōu)化的搜索功能,該功能可以訪問(wèn)定義了boq元素的所有步驟,并返回boq和remote的值(如果也已定義)。 HashMap<String,Step> resultMap = new HashMap<>(); test.getGroup().forEach(group -> group.getStep().forEach(step -> { if ("searchpattern".equals(step.getBoq())) resultMap.put("searchpattern", step); }));封裝此類搜索的最佳方法是什么?我可以編寫第二類作為包含此方法的適配器,還是有更好的選擇?遺產(chǎn)?使用JAXB本身的選項(xiàng)?使用第三方插件(例如jaxb-delegate插件)來(lái)實(shí)現(xiàn)Maven?
添加回答
舉報(bào)
0/150
提交
取消