0

我有一个 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>  

但我得到了一个文件名对象。何时从列表中读取字符串

       <datapoint>  
          <fieldname>somestring</fieldname>  
          <value> 

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

我必须使用两个 xsd 还是一个 xsd?我怎样才能获得标签内的值以及标签内的值。

4

1 回答 1

1

List<Serializable>包含String用于纯文本部分的 s 和JAXBElement<?>用于 XML 元素的对象。您可以使用它JAXBElement.getName()来检查元素的 QName。如果您有复杂的类型,您可以使用JAXBElement.getDeclaredType().

于 2016-10-10T09:15:11.363 回答