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

如何使用JAXB从XML中删除不需要的根元素?

万涵亮
2023-03-14

如何从通过JAXB生成的XML中删除不需要的根元素?

我需要的是

以下是Pojo类的代码:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="empType", propOrder={ "name", "age", "deptt"})
@XmlRootElement(name = "")
public class EmpType {


EmpType () {}

public EmpType (String name, String age, String deptt ) {

    this.name=name;
    this.age=age;
    this.deptt=deptt;

}

  @XmlElement(name="name", required=true)
  protected String name;
  @XmlElement(name="age", required=true)
  protected String age;
  @XmlElement(name="deptt", required=true)
  protected String deptt;

      ... getter / setters

}



  @XmlAccessorType(value=javax.xml.bind.annotation.XmlAccessType.FIELD)
  @XmlType(name="employeesType", propOrder={"emp"})

 public class EmployeesType
{
@XmlElement(required=true)
protected List<EmpType> emp;
protected String prolog;

public EmployeesType()
{
}

public List<EmpType> getEmp()
{
    if(emp== null)
    {
        data = new ArrayList<EmpType>();
    }
    return emp;
}

getter/setter for prolog
}

有没有办法删除Employee类中出现的Emp根元素?

我尝试在员工类中使用XMLRootElement(name="),但它并没有帮助我删除Emp标签。

共有1个答案

景俊语
2023-03-14

对于您想要的xml:

<Employees>
    <prolog>test prolog</prolog>
    <name>employeeOne</name>
    <age>24</age>
    <deptt>store</deptt>
    <name>employeeTwo</name>
    <age>25</age>
    <deptt>store</deptt>
</Employees>

姓名、年龄和部门不是通用元素的一部分。所以你应该有这样的POJO:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"prolog", "employeeDetails"})
@XmlRootElement(name = "Employees")
public class Employees {


    @XmlElement(name="prolog", required=true)
    protected String prolog;
    @XmlElements({
            @XmlElement(name="name", type = Name.class),
            @XmlElement(name="age", type = Age.class),
            @XmlElement(name="deptt", type = Department.class),
    })
    private List<EmployeeDetail> employeeDetails;

}

和名称:

public class Name implements EmployeeDetail {
    @XmlValue
    private String name;
}

年龄:

public class Age implements EmployeeDetail {
    @XmlValue
    private int age;

}

和部门:

public class Age implements EmployeeDetail {
    @XmlValue
    private int age;

}

公共界面雇员细节做不了太多:

public interface EmployeeDetail {
}

使用这些POJO,您将能够封送/取消封送指定的xml(跳过

 类似资料:
  • 问题内容: 我陷入了XML和Python的困境。任务很简单,但到目前为止我还无法解决,花了那么长时间。我是来这里咨询如何用几行解决它的。 感谢您对遍历树的任何帮助。我总是以太多或太少的元素结束。元素可以无限制地嵌套。给出的例子只是一个例子。我会接受任何解决方案,而不是对dom,minidom,sax等等不挑剔。 我有一个与此类似的XML文件: 我需要的是-解析XML并编写一个新文件。新文件应包含给

  • 有人知道我为什么得到这种阵列吗?我只想要下面这部分。我需要删除这些mysql连接和其他不需要的数组。 下面的代码显示了我如何获得该数组。当I

  • 我有一个问题,当我从xml中删除子节点时,xml中会有一个空行。节点已正确删除,但我不想要空行,我不知道空行来自何处,因为我没有编写xml,但Javas Transformer正在为我做这件事: 我要编辑的xml实际上非常简单,如下所示: 删除孩子后,它看起来像这样: 但我想要的是: 是否有一些函数可以调用我缺少的父节点?或者是否有针对xmls的显式漂亮打印函数?

  • 这是我的XML文件 我只想从xml中删除第二个选项 我的java代码从我的选项元素中删除所有选项。使用

  • 问题内容: 想象一下,我有以下类似的东西修改 如何在不影响任何子元素的情况下从DOM中仅删除(仅文本)“第一”,“第二”和“第三”。 问题答案: 如果要删除所有子文本节点,则可以使用,然后将匹配集减少为仅文本节点: 注意 :这将保留子元素上所有现有的事件处理程序,使用答案不会做(因为从DOM中删除了这些元素并重新添加了这些元素)。 注2 :一些链接的问题中的答案显示的代码与我的答案中的代码相似,但

  • 在代码中创建了这些类的实例之后,我调用了传递所需值的setter方法。尽管该方法的参数是Object,但其值最有可能是字符串(我无法控制它是如何定义的)。但是,为了保持一致,我将字符串转换为Object,以便它与方法的参数类型匹配。代码如下所示: 当我对Java对象进行整理时,我会在结果XML中得到以下内容,就在字符串值的前面: 我读过关于方法的参数类型和传递给它的数据类型不匹配的文章。在我的例子