Java CData通过xslt使用JAXB解组

Java CData通过xslt使用JAXB解组,java,xml,xslt,jaxb,sax,Java,Xml,Xslt,Jaxb,Sax,我尝试使用xsl转换转换第三方xml,然后使用JAXB将生成的xml转换为java对象。 但是,标记为CDATA的元素内容会丢失 这是我的第三方xml示例 <person> <name>aName</name> </person> 翻译 JAXBResult jaxbResult = new JAXBResult(JAXBContext.newInstance(User.class)); newXslTransformer(

我尝试使用xsl转换转换第三方xml,然后使用JAXB将生成的xml转换为java对象。 但是,标记为CDATA的元素内容会丢失

这是我的第三方xml示例

<person>
   <name>aName</name>
</person>
翻译

    JAXBResult jaxbResult = new JAXBResult(JAXBContext.newInstance(User.class));
    newXslTransformer().transform(new StreamSource(thirdPatyXmlFile), jaxbOutput);
    User user = (User)jaxbResult.getResult();
    System.out.println(user.inputXml);
但是上面的代码将inputXml输出为]>。 如果我像下面那样硬编码CDATA,我就能够得到inputXml,但动态生成CDATA时就不行了

<inputXml><![CDATA[<person><name>aName</name></person>]]></inputXml>
aName]]>

任何建议都将不胜感激。

A
JAXBResult
是一个
SAXResult
,因此转换结果将作为一系列SAX事件发布,JAXB解组器将使用它们构造
用户
对象

这是一种有效的技术,可以避免在以后解组时编写转换和重新分析

不幸的是,您的CDATA hack与此不符。 在
中,JAXBResult的ContentHandler会看到文本
,最后一个文本用作
User.inputXml
的值


似乎您需要转换为内存缓冲区,然后从中解组。

我已经使用了两步方法。正在寻找任何其他有效的解决方案。谢谢你的解释。
    JAXBResult jaxbResult = new JAXBResult(JAXBContext.newInstance(User.class));
    newXslTransformer().transform(new StreamSource(thirdPatyXmlFile), jaxbOutput);
    User user = (User)jaxbResult.getResult();
    System.out.println(user.inputXml);
<inputXml><![CDATA[<person><name>aName</name></person>]]></inputXml>