如何让jaxb在解组时忽略某些数据

我有一个xml结构“Filter”,它被解组到一个名为“Filter”的java类中。

XML状态看起来大致如下:

  prop1 val1   prop2 val2   

通常,它很有效。

但是,在某些情况下,其中一个属性值本身包含xml结构(请参阅下面的第二个propertyValue):

   prop1 val1   prop2 valB   

这里的问题是在解组此结构之后,propertyValue为null。

我想简单地让unmarshalling忽略这个看起来像xml的代码并将其视为一个简单的字符串值。

有谁知道我怎么能做到这一点? 谢谢你的回复!

使用“@XmlAnyElement”的注释怎么样? 您可以获取org.w3c.dom.Element的实例。 应该能够通过操作此实例来获取文本数据。

 class PropertyType { private String propertyName; // private String propertyValue; // comment out @XmlAnyElement(lax=true) private List propertyValue; // Adding this } 

获取文本数据的示例。

 // It is assumed that the child node is one. org.w3c.dom.Node nd = propertyValue.get(0).getFirstChild(); while(true) { if (nd.hasChildNodes()) { nd = nd.getFirstChild(); } else { System.out.println(nd.getNodeValue()); // this is text data break; } } 

对于这个用例,我将创建一个将转换XML文档的XSLT。 然后使用javax.xml.transform。* API将XML转换为JAXBResult以解组对象:

 import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.util.JAXBResult; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamSource; public class Demo { public static void main(String[] args) throws Exception { TransformerFactory tf = TransformerFactory.newInstance(); File xsltFile = new File("transform.xsl"); StreamSource xsltSource = new StreamSource(xsltFile); Transformer transformer = tf.newTransformer(xsltSource); File xml = new File("input.xml"); StreamSource xmlSource = new StreamSource(xml); JAXBContext jc = JAXBContext.newInstance(Filter.class); JAXBResult jaxbResult = new JAXBResult(jc); transformer.transform(xmlSource, jaxbResult); Filter filter = (Filter) jaxbResult.getResult(); } } 

transform.xsl

               

AFAIK JAXB处理xml架构,用于将XML解组为Java对象。 因此,如果schema将元素定义为简单元素,则它只能包含文本。 如果您需要将XML存储为简单文本。 您可能需要使用CDATA构造来转义它。 尝试将其封装如下所示,在取消编译之后,您将获得XML。

   prop1 val1   prop2 valB]]>