我正在尝试使用 xsl 转换转换第三方 xml,然后使用 JAXB 将生成的 xml 转换为 java 对象。但是,在两者之间的一些标记为 CDATA 的元素内容会丢失。
下面是我的第三方xml示例
<person>
<name>aName</name>
</person>
XSL转换
<xsl:template match="/">
<User>
<personName><xsl:value-of select="//name"/></personName>
<!-- Saving input xml as CDATA for future ref -->
<inputXml>
<xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text>
<xsl:copy-of select="."/>
<xsl:text disable-output-escaping="yes">]]></xsl:text>
</inputXml>
</User>
</xsl:template>
Java 类
@XmlRootElement
public class User{
@XmlElement
public String personName;
@XmlElement
public String 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输出为]]
<inputXml><![CDATA[<person><name>aName</name></person>]]></inputXml>
任何建议都将不胜感激。
JAXBResult
是 SAXResult
,因此转换结果作为一系列 SAX 事件发出,JAXB 取消元帅使用它们来构造 User
对象。
这是一种有效的技术,可以避免在以后解组时编写转换和重新分析。
不幸的是,您的CDATA技巧与此不符。在<code>内
似乎您需要转换到内存缓冲区,然后从那里解组。
问题内容: 我正在尝试创建一个非常简单的REST服务器。我只是有一个测试方法,它将返回字符串列表。这是代码: 它给出以下错误: 我希望JAXB对诸如String,Integer等简单类型具有默认设置。我想不是。这是我的想象: 使这种方法最简单的方法是什么? 问题答案: 我使用@LiorH的示例并将其扩展为: 注意,它使用泛型,因此您可以将其与String之外的其他类一起使用。现在,应用程序代码很简
我正在编写一个解组器,我正在努力与jaxb进行斗争,以获得一个有效的解决方案。 我想解组从生成的MessageDescription。wsdl文件。wsdl文件中的java类是: 由于没有@XmlRootElement,我用包装器扩展了类,并自己添加了注释 我使用我的“包装器”MessageDescription类来解组 解组过程正在工作,但有一个子项始终设置为null。我不知道在哪里可以修复这个
我正在尝试使用JAXB从遗留系统中解压XML文档。我的xml结构如下所示:
问题内容: 我有一个返回此XML的服务: 要么 我想使用以下类解组检索到的XML: 结果 : 项目名称 : 用户名 : 首先不起作用的解决方案 我得到一个空名单。 第二不起作用的解决方案 受本文启发,http://blog.bdoughan.com/2012/11/creating-generic-list-wrapper-in- jaxb.html 我修改了Response类: 然后使用以下代码
我正在尝试使用MOXy for JAXB JSON支持来设置一个简单的Jersey JAX-RS应用程序,我想定制解组器。我做了以下工作: 我为编写了一个覆盖,并在解组器上设置了一个事件处理程序。当我传递一个无效的JSON正文时,会执行中的print语句,但不会执行事件处理程序中的print语句。因此,提供程序已正确注册,但未调用事件处理程序。 什么可能导致此问题? 我想要实现的是,当用户在JSO
我已经生成java类使用从一个xsd,其中根元素是类型的。 jaxb生成的根元素是 当我尝试解组与该xsd对应的xml并强制转换JaxbElement时,它会引发一个强制转换异常: 片段: