如何在Java中确定子类的类类型

时间:2016-11-07 12:33:11

标签: java xml jaxb

我有一个包含以下元素的XML文件。

<productType>
  <productTypeX />
  <!-- One of the following elements are also possible:
  <productTypeY />
  <productTypeZ />
  -->
</productType>

因此,XML也可能如下所示:

<productType>
  <productTypeZ />
</productType>

使用JAXB将XML解组为POJO。

如何确定<productType>的孩子是X,Y还是Z?在映射的POJO中还是直接在XML中?

1 个答案:

答案 0 :(得分:1)

现在有一种方法可能不比手动检查 便宜 - 为每个if子类写GETTER {{1} 1}})但这里是:

让我们假设你在解组时最终得到null == obj.getProductTypeX()

现在您需要以JAXBElement<ProductType> productType(org.w3c.dom.Element)对象结束。可以这样做:

Element

现在,接口DOMResult res = new DOMResult(); marshaller.marshal(productType, res); Element elt = ((Document)res.getNode()).getDocumentElement(); 扩展了我们可以使用的接口Element 得出结论,我们最终得到一个Node结构对象,我们可以得到他现有的孩子:

TREE

现在您可以检查每个NodeList nodeList = elt.getChildNodes(); 的类型和值,但在大多数情况下,您必须检查节点是Node还是ELEMENT_NODE

ATTRIBUTE_NODE

我希望这会对您有所帮助,或者为您提供如何获得所需信息的任何指示。