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

JAXB对同名元素进行解组

梁华清
2023-03-14

这是我的xml结构

<catalog>
    <course>
        <course_id></course_id>
        <subjects>
            <subject>
                <subject_id></subject_id>
            </subject>
            <subject>
                <subject_id></subject_id>
            </subject>
        </subjects>
    </course>
</catalog>

因此,我尝试使用JAXB解组将这个xml绑定到一个类,但结果一无所获。

我在想,我有两个基本元素,课程和科目,所以我根据这些元素建立了两个类
此选项用于控制课程标签

@XmlRootElement(name="catalog")
@XmlAccessorType(XmlAccessType.FIELD)
public class curso {
    @XmlElement(name="course_id")
    int course_id;

    @XmlElementWrapper(name="subjects")
    @XmlElement(name="subject")
    List <subject> subjects = new ArrayList<>();


    public void setCourse_id(int curso_id) {
        this.curso_id = curso_id;
    }

    public void setSubjects(List<subject> subjects) {
        this.subjects = subjects;
    }

}

这是为了控制主题标签。

public class subject {
    String subject_id;

    @XmlElement(name="subject_id")
    public void setSubjectId(String id) {
        this.subject_id = id;
    }
}

我做了一些字符串函数,结果什么都没有。有什么问题吗?

共有1个答案

袁运良
2023-03-14

course元素还有一个包装标签

@XmlRootElement(name="catalog")
@XmlAccessorType(XmlAccessType.FIELD)
class catalog {
    @XmlElement(name="course")
    curso course;

    public curso getCourse() {
        return course;
    }

    public void setCourse(curso course) {
        this.course = course;
    }

    @Override
    public String toString() {
        return "catalog [course=" + course + "]";
    }
}

一个完整的例子

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="catalog")
@XmlAccessorType(XmlAccessType.FIELD)
class catalog {
    @XmlElement(name="course")
    curso course;

    public curso getCourse() {
        return course;
    }

    public void setCourse(curso course) {
        this.course = course;
    }

    @Override
    public String toString() {
        return "catalog [course=" + course + "]";
    }
}

class curso {
    @XmlElement(name = "course_id")
    int course_id;

    @XmlElementWrapper(name = "subjects")
    @XmlElement(name = "subject")
    List<subject> subjects = new ArrayList<>();

    public void setCourse_id(int curso_id) {
        this.course_id = curso_id;
    }

    public void setSubjects(List<subject> subjects) {
        this.subjects = subjects;
    }

    @Override
    public String toString() {
        return "curso [course_id=" + course_id + ", subjects=" + subjects + "]";
    }

}

class subject {
    String subject_id;

    @XmlElement(name = "subject_id")
    public void setSubjectId(String id) {
        this.subject_id = id;
    }

    @Override
    public String toString() {
        return "subject [subject_id=" + subject_id + "]";
    }
}

public class JaxbExample2 {
    public static void main(String[] args) {
        try {

            File file = new File("file.xml");
            JAXBContext jaxbContext = JAXBContext.newInstance(catalog.class);

            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            catalog customer = (catalog) jaxbUnmarshaller.unmarshal(file);
            System.out.println(customer);

        } catch (JAXBException e) {
            e.printStackTrace();
        }

    }
}

 类似资料:
  • 我认为这对真正理解JAXB绑定文件的人来说很容易... 如何配置JAXB将多个元素解组到同一个类中? 注意:我想避免在我的项目中添加另一个依赖项(比如MOXy)。理想情况下,这可以通过注释或自定义绑定文件来实现。 我有一个XML文档,其中包含许多相同元素的变体——每个元素都有完全相同的属性。使用下面的示例,我只关心“员工”,但XML指定了“董事、经理和员工”。为了我们的目的,这些都是同一个父类的子

  • 我正在尝试解组一个包含多个同名元素的XML文档。我不确定是否需要创建bean的Arraylist并将其传递给解组器。我希望有人能给我一些建议来解决这个问题。我试图解析的XML是一个SOAP响应,但我去掉了信封,所以我只有它的主体,它看起来是这样的: 这是从一个包含50多个字段的表返回的,但我创建了一个testBean,并且我定义了fkdevice只是为了使其简单,我的bean看起来像这样: 这给了

  • 我有下面的xml结构: 有不同的 Field(X) 包装器元素,它们包含相同的用户元素。XML 中可以发送 n 个字段。因此,我不能为每个单独的Jaxb。我需要访问用户,但在取消编组步骤后忽略 Field 元素。不幸的是,我无权更改xml结构。我无法找到解决方案。任何指针都会有所帮助。

  • 您好帮助请把xml文件放在里面一些相同的元素,这些元素的内容不同,“name”属性。这些元素有不同的项目集,如何进行解咒?断续器: 我需要在Cdb和FmssSc中执行对象2的解组。我的尝试:通用元素-ServiceBroker.class 适配器.class Cdb.class FmssSc.class 演示: 错误:

  • 背景: 我使用JAXB将XML解组为Java对象。最初,我只是使用JAXB来执行解组。然后对代码进行静态分析,并提出了XML外部实体注入的高关键性问题。经过一点研究,我发现了一个建议(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXB_Unmarshaller)使用配置为防止解析

  • 有太多关于大致相同主题的问题,但我找不到我想要的。如果我错过了,我很抱歉。 我正在尝试散集具有公共逻辑元素但使用不同标记定义的XML文件: 两个<代码> 我可以这样做: 所需要的只是在和中实现并分别返回或。 然而,在中有一个属性并以某种方式告诉JAXB将这两个字段映射到它似乎更简单。 我是不是想多了?你将如何实现它? (当然,我无法控制输入XML。如果可能的话,我还想避免使用MOXy的解决方案,因