没有架构的unmarshal xml

时间:2015-02-23 08:19:27

标签: java xml jaxb schema

我正在使用JAXB将xml转换为object。我手动创建类,因为WS供应商不提供我们的架构。

XML是: -

<com:DayAndTimeAvailability>
    <com:DayTypes>
        <com:MondayToSunday />
    </com:DayTypes>
    <com:OpeningHours>
        <com:TwentyFourHours />
    </com:OpeningHours>
</com:DayAndTimeAvailability>

我在&#34; DayTypes&#34;中感到困惑。元件。它可以有价值 <com:MondayToFriday/>,<com:Weekend/>,<com:MondayToSunday/>, <com:Monday/>,<com:Tuesday/>, <com:Wednesday/>,<com:Thursday/>, <com:Friday/>,<com:Saturday/>, <com:Sunday/>。 我想要一个String变量,它具有基于上提元素的值。就像我在xml中得到<com:MondayToFriday/>一样,我需要在字符串中保存值星期一 - 星期五每天24小时

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

如果您有xml,则无需手动创建类。 为此xml创建xsd,然后使用xjc命令生成POJO。 要将xml映射到对象,请使用

    JAXBContext context = JAXBContext.newInstance(YourMainClass.class);
            Unmarshaller u = context.createUnmarshaller();
            yourMainClassObject= (YourMainClass) u.unmarshal(new StringReader(xml));

答案 1 :(得分:1)

我确实喜欢这个

@XmlRootElement(name="DayTypes")
    public static class DayTypes{
        private ElementNSImpl element;
        private String value;

        @XmlAnyElement
        public ElementNSImpl getElement() {
            return element;
        }
        public void setElement(ElementNSImpl element) {
            String nodeName = element.getNodeName();
            switch (nodeName) {
            case "com:MondayToSunday":
                setValue("Monday - Sunday 24 Hours a Day");
                break;
            case "com:MondayToFriday":
                setValue("Monday - Friday 24 Hours a Day");
                break;
            default:
                setValue(nodeName);
                break;
            }
            this.element = element;
        }

        @XmlTransient
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
    }

但我不知道这是否正确。