2010-12-21 31 views
13

Tôi đang cố gắng để tạo ra một lược đồ XML có thể chụp XML mà trông giống như sau:Lược đồ XML cho SimpleType và thuộc tính?

<tagname description="simple string type attribute"> 
false <!-- simple boolean type --> 
</tagname> 

Nhưng đang chạy vào khó khăn. Thậm chí có thể xác định một lược đồ để nắm bắt được nó hay tôi đang ở trên một số snipe hunt?

Trả lời

33

Ở đây bạn đi

<xs:element name="tagname"> 
     <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:boolean"> 
        <xs:attribute name="description" type="xs:string" use="required"/> 
       </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
    </xs:element> 

Và đây là mẫu xác nhận

<tagname xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="file:/C:/Untitled2.xsd" description="123"> 
    true 
</tagname> 
1

Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn. Tôi đã đấu tranh với vấn đề này một thời gian và nó không thực sự rõ ràng như thế nào để xác định lược đồ mặc dù các mẫu XML thực tế là khá thẳng về phía trước. Vấn đề lớn nhất của tôi là làm thế nào để cấu trúc một lớp JAXB để xử lý việc này. Chỉ đến khi tôi thấy định nghĩa lược đồ của bạn và chạy nó qua xjc, tôi đã có thể thấy cách thiết lập nó trong JAXB. Các lớp Java JAXB là IMHO khá trực quan và tôi sẽ không bao giờ đoán làm thế nào để thiết lập nó. Tôi đã thử nhiều cách khác nhau để làm việc này mà không thành công.

Dưới đây là mẫu của lớp Java JAXB được tạo từ lược đồ đã đăng của bạn. Điều quan trọng là sử dụng các chú thích @XmlValue trên sân (bạn cũng có thể sử dụng nó trên getter của lĩnh vực này nhưng loại bỏ các chú thích XmlAccessorType:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { "value" }) 
@XmlRootElement(name = "tagname") 
public class Tagname { 

    @XmlValue 
    protected boolean value; 
    @XmlAttribute(name = "description", required = true) 
    protected String description; 

    public boolean isValue() { 
    return value; 
    } 

    public void setValue(boolean value) { 
    this.value = value; 
    } 

get and set for description omitted. 

Đây là marshalled JAXB tài liệu XML từ lớp đưa ra:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<tagname description="The Description">true</tagname> 

Tôi hy vọng phần bổ sung này sẽ giúp những người khác đang gặp khó khăn với cùng vấn đề không rõ ràng.

Các vấn đề liên quan