2015-02-23 37 views
0

我正在使用JAXB將xml轉換爲對象。我正在手動創建類,因爲WS供應商不提供我們的模式。unmarshal xml無模式

XML是: -

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

我在 「DayTypes」 元素混淆。它可以有值 <com:MondayToFriday/>,<com:Weekend/>,<com:MondayToSunday/>, <com:Monday/>,<com:Tuesday/>, <com:Wednesday/>,<com:Thursday/>, <com:Friday/>,<com:Saturday/>, <com:Sunday/>。 我想要一個字符串變量,其值基於上面提到的元素。就像我在xml中獲得<com:MondayToFriday/>那麼我需要將值爲的星期一 - 星期五每天24小時保存爲一個字符串。

任何人都可以幫助我嗎?

+0

下面是一個完整的例子演示瞭如何做到這一點:http://blog.bdoughan.com/2010/12/represent-string-values-as- element.html – 2015-02-23 13:47:01

+0

感謝Blaise Doughan。我正在搜索相同的。我可以按照下面的答案做。 – 2015-02-23 14:57:52

+0

嗨Blaise Doughan,我試過了,但每次我在解組中都得到空。不調用適配器的解組方法。 – 2015-02-23 15:36:21

回答

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; 
     } 
    } 

但我不知道這是正確的做法與否。

2

如果您有xml,那麼不需要手動創建類。 爲此xml創建xsd,然後使用xjc命令可以生成POJO。 要映射你的XML反對使用這個,

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