学习xml schema后,写点东西

来源:互联网 发布:金主请上当 网络完整版 编辑:程序博客网 时间:2024/04/30 14:53

一个很不错的网址,用来学习xml schema
    http://www.w3schools.com/schema/schema_facets.asp
例子:
testSchema.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="test" type="testType"/>
    <xs:complexType name="testType">
        <xs:sequence>
            <xs:element name="node1">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="1"/>
                            <xs:enumeration value="2"/>
                            <xs:enumeration value="3"/>
                            <xs:enumeration value="4"/>
                        </xs:restriction>
                    </xs:simpleType>
            </xs:element>
            <xs:element name="node2">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:minLength value="2"/>
                            <xs:maxLength value="2"/>
                            <xs:pattern value="no|ye|qq"/>
                            <xs:enumeration value="qq"/>
                        </xs:restriction>
                    </xs:simpleType>
            </xs:element>
            <xs:element name="node3">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[a-zA-Z]{2}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="node4">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                       
                        <xs:pattern value="/d{12}|"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="node5">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="12"/>
                        <xs:maxLength value="12"/>
                        <xs:pattern value="/d{12}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="node6">
                <xs:simpleType>
                    <xs:restriction base="xs:double">
                        <xs:maxExclusive value="99999.9"/>
                        <xs:minInclusive value="0"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="node7">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="2"/>
                        <xs:minLength value="0"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="node8">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="a|q|s"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="node9">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[A-E]|Y|N|K|P|S|"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="node10">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="0"/>
                        <xs:maxLength value="12"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

test.xsdconfig
用来创建包名
<xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">
    <xb:namespace>
        <xb:package>jhf.test</xb:package>
    </xb:namespace>
</xb:config>
可以用workshop生成ForTestXmlSchema.jar文件。很方便

用来测试的文件:
TestMySchema.java
package test;

import com.bea.xml.XmlOptions;
import java.util.ArrayList;
import java.util.List;
import jhf.test.TestDocument;
import jhf.test.TestType;

public class TestMySchema
{
    private TestDocument testDoc;
   
    TestMySchema() {
        init();
    }
   
    private void init() {
        testDoc = TestDocument.Factory.newInstance();
        TestType testT= testDoc.addNewTest();
        TestType.Node1.Enum enNode1 = TestType.Node1.Enum.forString("1");
        TestType.Node2.Enum enNode2 = TestType.Node2.Enum.forString("qq");
        testT.setNode1(enNode1);
        testT.setNode2(enNode2);
        testT.setNode3("ss");
        testT.setNode4("111111111111");
        testT.setNode5("200211122412");
        testT.setNode6(9999.9);
        testT.setNode7("12");
        testT.setNode8("b");
        testT.setNode9("A");
        testT.setNode10("");
    }
    private List validate() {
        List errors = new ArrayList();
        XmlOptions xmlOptions = new XmlOptions();
        xmlOptions.setErrorListener(errors);
        testDoc.validate(xmlOptions);
        return errors;
    }
    private String getFormatXml() {
        return testDoc.toString();
    }
    private String getUnFormatXml() {
        return testDoc.xmlText();
    }
   
    /**
     * @param args
     */
    public static void main(String[] args) {
        TestMySchema testSchema = new TestMySchema();
        List errors = testSchema.validate();
        if(errors != null) {           
            for(int i=0; i<errors.size(); i++) {
                System.out.println(errors.get(i));
               
            }
       
        }
        System.out.println(testSchema.getFormatXml());
       
    }
   
   
}