为了账号安全,请及时绑定邮箱和手机立即绑定

将访问例程添加到由XSD生成的JAXB生成的类集中

将访问例程添加到由XSD生成的JAXB生成的类集中

SMILET 2021-05-04 21:26:28
我有一个基于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?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信