如何从List <serializable> </serializable>读取字符串

时间:2013-09-05 16:55:23

标签: java xml xml-parsing jaxb xsd

我有一个xsd架构

    <xs:complexType name="valueType" mixed="true">    
       <xs:sequence>    
          <xs:element name="filename" type="xs:string" minOccurs="0" />    
      </xs:sequence>    
   </xs:complexType>  

和XML

    <datapoint>  
       <fieldname>somestring</fieldname>  
       <value>some string</value>  
    </datapoint>  
    <datapoint>  
       <fieldname>somestring</fieldname>  
       <value>some string</value>  
    </datapoint>  
    <datapoint>  
        <fieldname>somestring</fieldname>  
        <value>  
           </filedata>
           <filename>some string</filename>  
        </value>  
   </datapoint>  

我使用了JAXB解析器并创建了一个类

          public static class Value {  
              @XmlElementRef(name = "string", type = JAXBElement.class)  
              @XmlMixed  
              protected List<Serializable> content;  

              public List<Serializable> getContent() {  
                if (content == null) {  
                   content = new ArrayList<Serializable>();  
                 }  
                 return this.content;  
              }  
            }  

我能够在

时使用ValueObj.getContent()获取值
   <datapoint>  
        <fieldname>somestring</fieldname>  
        <value>some string</value>  
   </datapoint>  

但是我得到了一个文件名对象。

时如何从List中读取字符串
       <datapoint>  
          <fieldname>somestring</fieldname>  
          <value> 

               <filename>some string</filename>  
           </value>  
        </datapoint>  

我必须使用两个xsd或一个xsd吗?如何获取标签内部和标签内部的值。

1 个答案:

答案 0 :(得分:0)

List<Serializable>将包含用于纯文本部分的String和用于XML元素的JAXBElement<?>个对象。您可以使用JAXBElement.getName()来检查元素的QName。如果您有复杂类型,则可以使用JAXBElement.getDeclaredType()获取相应的java类型(由于Java类型擦除而从JAXBElement中删除)。