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

使用EclipseLink MOXy在JAXB封送中重复XML标记

闻人英韶
2023-03-14

有人能帮助我使用EclipseLink MOXY使用JAXB编组生成带有重复标记的XML吗。

@XmlPath("ExecRpt/Pty/@ID") --"ABC"
@XmlPath("ExecRpt/Pty/@ID") --"ABD"
@XmlPath("ExecRpt/Instrmt/@Exch") --"AAA"
 <ExecRpt> <pty ID="ABC"/> <Instrmt Exch="AAA"/><pty ID="ABD"/>  </ExecRpt>

使用下面的方法,我将从带注释的bean生成XML。

 JAXBContext.createMarshaller()
 Marshaller.marshal()

多谢你

共有1个答案

景子安
2023-03-14

下面是如何使用EclipseLink JAXB(MOXy)的@XMLPath扩展映射用例的示例。

Execrpt

您可以指定要映射到@xmlpath(“pty[2]/@id”)的元素的位置。

package forum12052961;

import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement(name="ExecRpt")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"field1", "field2", "field3"})
public class ExecRpt {

    @XmlPath("Pty[1]/@ID")
    String field1;

    @XmlPath("Instrmt/@Exch")
    String field2;

    @XmlPath("Pty[2]/@ID")
    String field3;

}

JAXB.Properties

要将MOXy指定为JAXB提供程序,您需要在与域模型相同的包中有一个名为JAXB.properties的文件,该文件包含以下条目(请参见:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html)。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

演示

package forum12052961;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(ExecRpt.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum12052961/input.xml");
        ExecRpt execRpt = (ExecRpt) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(execRpt, System.out);
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<ExecRpt>
   <Pty ID="ABC"/>
   <Instrmt Exch="AAA"/>
   <Pty ID="ABD"/>
</ExecRpt>

有关更多信息

  • http://blog.bdoughan.com/2010/07/xpath-based-mapping.html
  • http://blog.bdoughan.com/2010/09/xpath-based-mapping-geocode-example.html
  • http://blog.bdoughan.com/2011/03/Map-to-element-based-on-attribute-value.html
 类似资料:
  • 我正在构建一系列链接类,我希望这些类的实例能够整理成XML,这样我就可以将它们保存到一个文件中,以后再读进去。 目前我使用以下代码作为测试用例: XML输出为: 元素为空有什么原因吗?我希望它包含日期的字符串表示(即)。为了做到这一点,我需要编写一些我自己的代码吗? 的输出是:

  • 我正在尝试解封包含CDATA元素的XML。我得到的字符串仍然有CDATA“包装器”。我使用XJC从XSD创建Java类,它们在包中。我正在使用包含在Oracle(Sun)Java7 JDK中的JAXB。 CDATA包装器为什么会持续存在?在我在这个站点和其他站点上看到的每一个示例中,它们都是在解封过程中被删除的。这肯定是个简单的问题,但我就是看不出来。

  • 当我整理来自JAXB生成的xsi模式类的XML时,根节点缺少xmlns:xsi信息,如下所示。关于如何在我整理的XML中获取名称空间信息,有什么想法吗? 当前马歇尔结果: 期望的马歇尔结果: 我的架构(它的示例部分): ……

  • 我正在尝试使用JAXB进行封送处理。 我的输出是这样的: ...但我需要这样的输出: 如果取消对代码的注释,则会得到。没有它,我可以编译,但我不能得到所需的精确输出。 我的豆子长这样: 适配器类

  • 我有一个由第三方供应商提供的XSD文件。我需要解析该XSD文件并生成Java对象。我使用JAXB通过maven插件解析XSD文件。 一切都很顺利,直到我最近要求使用来自正在解析的XML中的一个标记的数据。标记的complexType具有mixed=true,因此JAXB生成的java类如下所示。 XSD复杂类型: 生成的JAXB类 GeneralRemark>类不包含List ,而是包含List

  • 我正在使用JAXB从XML生成java代码,它有一个枚举 我想为这个枚举添加几种颜色,比如红色和白色。我们不想更新xsd或生成的XML/Java代码,因为这些代码不属于我们,我们想要保持原样。 备选案文1.如果有一种读取XSD的方法,当它读取xs:simpleType name=“color”时,我可以为枚举添加颜色,这样生成的java枚举就具有所有需要的值 备选案文2.如果我可以编写一个适配器,