JAXB从子级获取属性值

时间:2020-02-07 10:18:00

标签: java xml jaxb

我似乎无法从Child中获得xml中的属性信息。我尝试了几种不同的方法,但没有一种有效。 (从父级获取属性信息效果很好)

  • 我正在使用JAXB库
  • XML是嵌套的-+ 30万行

这是我的XML的简短版本

<HarnessContainer xsi:noNamespaceSchemaLocation="xxx" Signature="15D823AAFC2CC91A61E1755C76E621"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Harness HarnessName="" HarnessDate="13.08.2019">
        <!--...-->
    </Harness>
</HarnessContainer>

这是我的父母班

@XmlRootElement(name = "HarnessContainer")
@XmlAccessorType(XmlAccessType.FIELD)
public class HarnessContainer implements Serializable {


    private Harness harness;
    @XmlAttribute(name = "Signature")
    private String Signature;

    public HarnessContainer() {
    }

    public HarnessContainer(Harness harness, String signature) {
        this.harness = harness;
        Signature = signature;
    }
    //setters and getters
}

这是我的孩子班

@XmlRootElement(name = "Harness")
@XmlAccessorType(XmlAccessType.FIELD)
public class Harness implements Serializable {


    @XmlAttribute(name = "HarnessDate")
    private String harnessDate;

    public Harness() {
    }

    public Harness(String harnessDate) {
        this.harnessDate = harnessDate;
    }
    //setters and getters
}

这是正在调用的类

   public class main {

    public static void main(String[] args) throws JAXBException, IOException {

        File xmlFile = new File("C:\\Users\\Mini\\Desktop\\Desktop\\file.xml");
        JAXBContext jaxbContext;
        try {
            jaxbContext = JAXBContext.newInstance(HarnessContainer.class);
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

            HarnessContainer harnessContainer = (HarnessContainer) jaxbUnmarshaller.unmarshal(xmlFile);

            System.out.println(harnessContainer.getHarness().getHarnessDate());

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

我选择使用@XmlAccessorType(XmlAccessType.FIELD),因为我计划有很多字段,而这种附件类型似乎最适合此类型。我还尝试了不同的注释,但没有一个起作用。

1 个答案:

答案 0 :(得分:0)

您的问题不是不是insert_id :[161,162,163,164] and venue_id :[21,3,5,6] XML属性没有被映射,而是您的问题是整个videoHTML:any; getVideoHTML(videoNumber, trackName, trackType = 'srt') { this.videoHTML = '<video id="video-js" class="video-js vjs-default-skin" ' +'controls preload="auto" width="640" height="264" ' +'poster="img/' + videoNumber + '.jpg"' + 'data-setup=\'{"example_option":true}\'>' + '<source src="videos/' + videoNumber + '.mp4" type="video/mp4" />' + '<track id="video-srt" kind="captions" src="subs/' + trackName + '.' + trackType + '" srclang="it" label="Italian" default></track>' + '</video>'; } 对象没有被映射。

这是因为默认元素名称不是XML中的名称。要修复,请指定名称:

<div [innerHTML]="videoHTML"></div>

Harness字段现在将不为空,而Harness字段将不为空。