当前位置: 首页 > 知识库问答 >
问题:

用xslt上的JAXB解组CData

韦衡
2023-03-14

我正在尝试使用 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">&lt;![CDATA[</xsl:text>
            <xsl:copy-of select="."/>
            <xsl:text disable-output-escaping="yes">]]&gt;</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>

任何建议都将不胜感激。

共有1个答案

冯峻
2023-03-14

JAXBResultSAXResult,因此转换结果作为一系列 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时,它会引发一个强制转换异常: 片段: