我有一个基于XSD的嵌套XML结构。我使用JAXB进行编组(只读)。通常,我需要在大型结构的某处找到一个或多个元素。为了避免每次需要搜索时都遍历结构,我想添加一个带有内部缓存的优化搜索功能。定义它的最佳方法是什么?不同方式的优点/缺点是什么?我最初想到使用Facade或适配器,其中adaper类访问生成的类并根据需要添加方法。但是我想提出建议。作为一个(略)简化的示例,需要搜索基于此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进行了编译,因此我得到了几个类。使用解组功能,我在内存中拥有访问XML的数据结构。现在考虑,我需要一个优化的搜索功能,该功能可以访问定义了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); }));封装此类搜索的最佳方法是什么?我可以编写第二类作为包含此方法的适配器,还是有更好的选择?遗产?使用JAXB本身的选项?使用第三方插件(例如jaxb-delegate插件)来实现Maven?
添加回答
举报
0/150
提交
取消