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

我有一个基于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?


SMILET
浏览 130回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java