2012-03-08 121 views

回答

6
@XmlSchemaType(name = "normalizedString") 
private String normalized; 

當使用上述註釋時,XSD:規格化類型將被用於產生一個XML模式時對應於該屬性的屬性/元素指定。

@XmlJavaTypeAdapter(NormalizedStringAdapter.class) 
private String normalized; 

NormalizedStringAdapter確實的解組操作期間的工作:換行符,回車和製表符被刪除。

input.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <adapter>  A  B 
C  </adapter> 
    <schemaType>  A  B 
C  </schemaType> 
    <control>  A  B 
C  </control> 
</root> 

package forum383861; 

import javax.xml.bind.annotation.*; 
import javax.xml.bind.annotation.adapters.*; 

@XmlRootElement 
@XmlType(propOrder={"adapter", "schemaType", "control"}) 
public class Root { 

    private String adapter; 
    private String schemaType; 
    private String control; 

    @XmlJavaTypeAdapter(NormalizedStringAdapter.class) 
    public String getAdapter() { 
     return adapter; 
    } 

    public void setAdapter(String adpater) { 
     this.adapter = adpater; 
    } 

    @XmlSchemaType(name="normalizedString") 
    public String getSchemaType() { 
     return schemaType; 
    } 

    public void setSchemaType(String schemaType) { 
     this.schemaType = schemaType; 
    } 

    public String getControl() { 
     return control; 
    } 

    public void setControl(String control) { 
     this.control = control; 
    } 

} 

演示

package forum383861; 

import java.io.*; 
import javax.xml.bind.*; 
import javax.xml.transform.Result; 
import javax.xml.transform.stream.StreamResult; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Root.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     File xml = new File("src/forum383861/input.xml"); 
     Root root = (Root) unmarshaller.unmarshal(xml); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(root, System.out); 

     System.out.println(); 

     jc.generateSchema(new SchemaOutputResolver() { 

      @Override 
      public Result createOutput(String arg0, String arg1) throws IOException { 
       StreamResult result = new StreamResult(System.out); 
       result.setSystemId(arg1); 
       return result; 
      } 

     }); 
    } 

} 

輸出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<root> 
    <adapter>  A  B C  </adapter> 
    <schemaType>  A  B 
C  </schemaType> 
    <control>  A  B 
C  </control> 
</root> 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="root" type="root"/> 

    <xs:complexType name="root"> 
    <xs:sequence> 
     <xs:element name="adapter" type="xs:string" minOccurs="0"/> 
     <xs:element name="schemaType" type="xs:normalizedString" minOccurs="0"/> 
     <xs:element name="control" type="xs:string" minOccurs="0"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
+0

所以'@XmlSchemaType(名稱= 「規格化」)'爲XSD生成與POJO和'@XmlJavaTypeAdapter(NormalizedStringAdapter.class)'用於元帥/ Unmarhal,右?謝謝。 – 2012-03-09 04:43:37

+0

是否有'xs:token'適配器? – 2012-03-09 04:45:13

+0

不要介意'xs:token'。我剛剛找到[CollapsedStringAdapter](http://docs.oracle.com/cd/E17409_01/javase/6/docs/api/javax/xml/bind/annotation/adapters/CollapsedStringAdapter.html)。 :) – 2012-03-09 04:51:19

相關問題