Java CData通过xslt使用JAXB解组
我尝试使用xsl转换转换第三方xml,然后使用JAXB将生成的xml转换为java对象。 但是,标记为CDATA的元素内容会丢失 这是我的第三方xml示例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(
<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>