xml Schema 學習總結

簡單類型(simpleType)

  • 1,簡單元素:指只能包含文本內容,不能夠包含子元素,也沒有屬性的元素。
    格式:
        <xs:element name="xxx" type="yyy" />
    例子:
        <xs:element name="name" type="xs:string"/>
        <xs:element name="age" type="xs:integer"/> 
        <xs:element name="gender" type="xs:boolean"/>
  • 2,屬性: 所有的元素均被聲明簡單類型。只有復雜類型的元素才可以擁有屬性。
    格式:
        <xs:attribute name="xxx" type="yyy"/>

    例子:
    <xs:attribute name="lang" type="xs:string"/>

所有的屬性默認都是可選的,我們可以通過使用use關鍵字明確指出是可選或是必需:

    <xs:attribute name="lang" type="xs:string" use="optional"/>
    <xs:attribute name="lang" type="xs:string" use="required"/>

我們可以通過使用default 或 fixed 為簡單類型(簡單元素,屬性)指定默認值或固定值,

    <xs:element name="color" type="xs:string" default="red"/>
    <xs:attribute name="lang" type="xs:string" fixed="CN"/>

3,**對簡單類型的約束 **

| 約束 | 含義 |
|: --------------- :|: -----------:|
| enumeration |定義允許值的枚舉 |
| fractionDigits |指定最多允許的小數位數(必須大于或等于零) |
| length | 精確指定允許的最大字符長度 |
| maxExclusive | 指定允許的最大數值,必須小于該值 |
| maxInclusive | 指定允許的最大數值,必須小于或等于該值 |
| maxLength | 指定允許的最大字符長度(必須大于等于零) |
| minExclusive | 指定允許的最小數值,必須大于該值 |
| minInclusive | 指定允許的最小數值,必須大于或等于該值 |
| minLength | 指定允許的最小字符長度 |
| pattern | 指定允許值的模式,類似正則表達式 |
| totalDigits | 精確指定數字個數 |
| whiteSpace | 處理空白(保留:preserve;替換: replace;合并:collapse)|

示例

    test.xsd
----------------------------------------------------------------
    <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                elementFormDefault="qualified" attributeFormDefault="unqualified"
>

    <xs:attribute name="interest" type="xs:integer"/>
    <xs:group name="myGroup">
        <xs:sequence >
            <xs:element name="name" type="xs:string"></xs:element>
            <xs:element name="birhtday" type="xs:date"></xs:element>

        </xs:sequence>
    </xs:group>

<xs:simpleType name="ageType">

    <xs:restriction base="xs:integer">
        <xs:minInclusive value="30"></xs:minInclusive>
        <xs:maxExclusive value="100"></xs:maxExclusive>
    </xs:restriction>

</xs:simpleType>

    <xs:element name="age" type="ageType"></xs:element>

    <xs:element name="person">
        <xs:complexType>

            <xs:sequence>
                <xs:group ref="myGroup"></xs:group>
                <xs:element ref="age"></xs:element>

            </xs:sequence>
            <xs:attribute ref="interest" use="required" />
        </xs:complexType>



    </xs:element>



</xs:schema >
----------------------------------------------------------------

        test.xml
----------------------------------------------------------------        
        <?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="test2.xsd"
       interest="223"

>

    <name>zhangsan</name>

    <birhtday>2017-09-28</birhtday>
    <age>33</age>

</person>

復雜類型(complexType)

復雜類型指包含其他元素/屬性的元素類型。
    <xs:element name="message">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="to" type="xs:string"/>
                <xs:element name="from" type="xs:string"/>
                <xs:element name="body" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

注意元素 to,from,body 包含在<xs:sequence></xs:sequence>中,表明 這些元素必須按照定義的順序出現在你的 XML 文件中。
當然,message 元素也可以包含一個 type 屬性,指向我們定義的復雜類型, 象這樣:

    <xs:element name="message" type="msg"/>

    <xs:complexType name="msg">
        <xs:sequence>
            <xs:element name="to" type="xs:string"/>
            <xs:element name="from" type="xs:string"/> 
            <xs:element name="body" type="xs:string"/> 
        </xs:sequence>
    </xs:complexType>

復雜類型(complexType) 和 簡單類型(simpleType)區別

復雜類型和簡單類型之間最根本的區別就是:
復雜類型的內容中可以包含其他 元素,也可以帶有屬性(Attribute),但簡單類型既不能包含子元素,也不能 帶有任何屬性。

Schema 使用練習

  • 1、如何描述空元素,比如:<product prodid="1345" />
    因為是空元素,所以不包含子元素,同時由于包含屬性,用 attribute 定義。
    <xs:element name="product">
        <xs:complexType>
            <xs:attribute name="prodid" type="xs:positiveInteger"/>
        </xs:complexType>
    </xs:element>

也可以這樣:
<xs:element name="product" type="productType"/>
<xs:complexType name="productType">
    <xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>

  • 2、如何描述只含有簡單內容(文本/屬性)的元素,比如:
    <message date="2006-06-26">Hi,My Girl!</message>

由于只包含簡單內容,所以我們在元素內容定義的外面用 simpleContent 指 出,當描述簡單內容的時候,我們需要在簡單內容里使用 extension 或者 restriction 來描述內容的數據類型。

    <xs:element name="message"> 
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string"> 
                    <xs:attribute name="date" type="xs:date" /> 
                </xs:extension>
            </xs:simpleContent> 
        </xs:complexType> 
    </xs:element>

其中 message 的屬性 date 的數據類型為日期(xs:date)。
順便提一下:XML Schema 中常用的數據類型有:
xs:string 、xs:decimal 、xs:integer 、xs:boolean 、xs:date 、xs:time 等。

復雜類型(complexType)定義元素如何出現。

定義元素如何出現:包括 all,sequence,choice 這三個。

*1, all: 默認值。不限制子元素的出現順序,每個子元素必須出現且只能出現一次。

    <xs:element name="person">
        <xs:complexType>
            <xs:all>
                <xs:element name="firstname" type="xs:string"/>
                <xs:element name="lastname" type="xs:string"/> 
            </xs:all>
        </xs:complexType> 
    </xs:element>

*2,sequence:子元素在 XML 文件中按照 XML Schema 定義的順序出現。

*3、choice:兩個或多個子元素中僅出現一個。

    <xs:element name="gender"> 
        <xs:complexType>
            <xs:choice>
                <xs:element name="male" type="male"/>
                <xs:element name="female" type="female"/> 
            </xs:choice>
        </xs:complexType> 
    </xs:element>

次數限定類,包括 minOccurs 和 maxOccurs,前者指定最少出現次數,后者指定最多出現次數

    <xs:element name="person">
        <xs:complexType>
            <xs:sequence maxOccurs="10" minOccurs="0">
                <xs:element name="full_name" type="xs:string"/> 
                <xs:element name="child_name" type="xs:string" maxOccurs="10" minOccurs="0"/> 
            </xs:sequence>
        </xs:complexType> 
    </xs:element>

** 如果元素出現的最大次數無限制,可以使用 maxOccurs="unbounded"。 **

    <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified" attributeFormDefault="unqualified"
>
    <xs:element name="姓名" type="xs:string"></xs:element>
    <xs:element name="性別">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="男"></xs:enumeration>
                <xs:enumeration value="女"></xs:enumeration>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="年齡">
        <xs:simpleType>
            <xs:restriction base="xs:int">
                <xs:minInclusive value="0"></xs:minInclusive>
                <xs:maxInclusive value="150"></xs:maxInclusive>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>



    <xs:element name="學生">
        <xs:complexType >
            <xs:sequence>
                <xs:element ref="姓名"></xs:element>
                <xs:element ref="性別"></xs:element>
                <xs:element ref="年齡"></xs:element>
            </xs:sequence>
            <xs:attribute name="學號" type="xs:string" use="required"></xs:attribute>
        </xs:complexType>
    </xs:element>

    <xs:element name="學生名冊">
        <xs:complexType>
            <xs:sequence minOccurs="1" maxOccurs="unbounded">
                <xs:element ref="學生"></xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

--------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<學生名冊 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="demo.xsd"
>


    <學生 學號="1">
        <姓名>張三</姓名>
        <性別>男</性別>
        <年齡>120</年齡>

    </學生>
    <學生 學號="2">
        <姓名>李四</姓名>
        <性別>女</性別>
        <年齡>19</年齡>
    </學生>
    <學生 學號="3">
        <姓名>王五</姓名>
        <性別>男</性別>
        <年齡>21</年齡>
    </學生>


</學生名冊>

dom4j 使用

     private static void read() throws DocumentException {
        SAXReader saxReader = new SAXReader();
        Document doc = saxReader.read(new File("candidate.xml"));
        Element root = doc.getRootElement();

        System.out.println(root.getText());
        System.out.println(root.getName());
        System.out.println("----------------------------");

        List<Element> telList = root.elements("PERSON");
        System.out.println("---" + telList.size());
        telList.forEach(element -> {

            String name = element.element("NAME").getText();
            String address = element.element("ADDRESS").getText();
            String tel = element.element("TEL").getText();
            String fax = element.element("FAX").getText();
            String email = element.element("EMAIL").getText();


            String personid = element.attribute("PERSONID").getText();

            System.out.println("personid = " + personid);

            System.out.println("name = " + name + "\t address=" + address + "\t tel=" + tel +
                    "\t fax=" + fax + "\t email=" + email);

        });
    }


       private static void write() throws Exception {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement("聯系人列表");
        root.addAttribute("公司","A 集團");

        Element contactPerson  = root.addElement("聯系人");
        contactPerson.addElement("姓名").addText("張勝男");
        contactPerson.addElement("公司").addText("A 公司");
        contactPerson.addElement("電話").addText("(021)5555666");
        Element address = contactPerson.addElement("地址");
        address.addElement("街道").addText("5");
        address.addElement("城市").addText("上海市");
        address.addElement("省份").addText("上海");

        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setIndentSize(4);
        XMLWriter writer = new XMLWriter(System.out,format);
        writer.write(document);

        XMLWriter filewriter = new XMLWriter(new FileOutputStream(new File("test.xml")),format);
        filewriter.write(document);

    }

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Xml Schema的用途 1. 定義一個Xml文檔中都有什么元素 2. 定義一個Xml文檔中都會有什么屬性 ...
    _東邪_閱讀 2,364評論 2 4
  • 1. XML簡介 以下內容來自于http://www.w3school.com.cn/xml 基本知識 XML 和...
    WebSSO閱讀 1,956評論 1 7
  • xml xml就是一個標記語言,主要用途就是數據傳輸和配置文件。 eg: xml總是以<?xml version=...
    大批閱讀 347評論 0 1
  • Schema與DTD XML Schema符合XML語法結構。 DOM、SAX等XML API很容易解析出XML ...
    扒塊腹肌閱讀 2,163評論 0 4
  • xml (extensible markup language)1.xml 是可擴展標記語言2.xml是一種標記語...
    帥哥_刷哥閱讀 668評論 0 1