旗下导航:搜·么
当前位置:网站首页 > XML教程 > 正文

XML简明教程(7)【XML教程】,XML,简明教程

作者:搜教程发布时间:2019-12-01分类:XML教程浏览:72评论:0


导读:目次生长汗青XML和HTML对比之可扩大XML和HTML对比之语法细节XML考证之DTDXML称号空间XML语法结构XML考证之SchemaDOM...

目次

生长汗青

XML和HTML对比之可扩大

XML和HTML对比之语法细节

XML考证之DTD

XML称号空间

XML语法结构

XML考证之Schema

DOM4J读写配置文件

关于SLT

XML考证之Schema


就像前面的文章所说的,经由历程DTD我们能够很轻易的推断要考证的XML是不是相符我们所定义的范例(元素之间的关联,属性的取值是不是准确)然则假如要考证元素的内容DTD就无计可施了,因而人们研讨了新的考证要领——Schema。

除了上面的上风以外Schema相关于DTD而言更令人兴奋的是其自身就是一个优越情势的XML文档,如许一来编写Schema就非常轻易了。相关于自身有一套自力的语法的DTD而言,无论是编写照样保护起来都是非常难题的。

一个Schema文件就是一个XML文件所以所编写一个XML对应的Schema的历程就是对比着XMLXML,如许的话编写Schema是非常轻易的。下面演示怎样对比XML编写其对应的Schema

原XML文件(test2.xml)

<?xml version="1.0"encoding="ISO-8859-1"?>
 
<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
 <orderperson>George Bush</orderperson>
 <shipto>
  <name>John Adams</name>
  <address>Oxford Street</address>
  <city>London</city>
  <country>UK</country>
 </shipto>
 <item>
  <title>Empire Burlesque</title>
  <note>Special Edition</note>
  <quantity>1</quantity>
  <price>10.90</price>
 </item>
 <item>
  <title>Hide your heart</title>
  <quantity>1</quantity>
  <price>9.90</price>
 </item>
</shiporder>




关于上面的这个XML下面我们最先建立一个Schema。顺从的准绳就是本来的XML怎样写那末其对应的Schema就怎样形貌,就像你在和一个人面临面的形貌一样。

Schema代码以下(shiporder.xsd)

 <?xml version="1.0"encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="orderperson"type="xs:string"/>
   <xs:element name="shipto">
    <xs:complexType>
     <xs:sequence>
      <xs:elementname="name" type="xs:string"/>
      <xs:elementname="address" type="xs:string"/>
      <xs:elementname="city" type="xs:string"/>
      <xs:elementname="country" type="xs:string"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="item"maxOccurs="unbounded">
    <xs:complexType>
     <xs:sequence>
      <xs:elementname="title" type="xs:string"/>
      <xs:elementname="note" type="xs:string" minOccurs="0"/>
      <xs:elementname="quantity" type="xs:positiveInteger"/>
      <xs:element name="price"type="xs:decimal"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
  <xs:attribute name="orderid"type="xs:string" use="required"/>
 </xs:complexType>
</xs:element>
 
</xs:schema>


代码剖析:

第一行是一切XML的声明无需赘述。

第二行为此XMLSchema自身就是一个XML)定义了一个定名空间。

从第四行最先才是对原XML的一些请求:

起首定义了根元素为shiporder(行4),其次由于shiporder元素有一个属性,个中包括其他的元素所以其为复合范例(行5)。然后经由历程sequence元素根据递次围困其子元素(行10---15),形貌元素的称号以及元素的范例(行11----14),假如须要形貌元素的限定前提(行22)。形貌根元素的属性,由因而必选属性所以挑选required关键字,须要注重的是这个属性必需放在末了(行29

经由历程Schema考证XML的代码和前面文章中的DTD考证迥然不同,代码以下:

package ValidateXml;
 
import java.io.File;
import java.io.IOException;
 
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
 
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
 
importcom.sun.org.apache.xml.internal.utils.DefaultErrorHandler;
 
public class XmlValidator
{
    private String xsdFilePath;
 
    public XmlValidator(String xsdFilePath)
    {
        this.xsdFilePath =xsdFilePath;
    }
 
    public String validata(String xmlFilePath,ErrorHandler errorHandler)
    {
        String msg = null;
        SchemaFactoryfactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        try
        {
           Schema schema = factory.newSchema(new File(xsdFilePath));
           Validator validator = schema.newValidator();
           validator.setErrorHandler(errorHandler);
           validator.validate(new StreamSource(new File(xmlFilePath)));
        }
        catch (SAXExceptione)
        {
           msg = e.getMessage();
           e.printStackTrace();
        }
        catch (IOExceptione)
        {
           msg = e.getMessage();
           e.printStackTrace();
        }
        return msg;
    }
 
    public static void main(String[] args)
    {
        String xmlFilePath ="d://test2.xml";
        String xsdFilePath ="d://shiporder.xsd";
        XmlValidator my =new XmlValidator(xsdFilePath);
        String msg =my.validata(xmlFilePath, new DefaultErrorHandler());
       System.out.println(msg == null);
    }
}

假如原XML文件相符Schema文件中的形貌则返回true;不然抛出非常举行形貌那里不相符,而且返回false。(详细的操纵可在现实工程中自行定制,这里只是举行简朴的形貌)



以上就是XML简明教程(7) 的内容,更多相关内容请关注ki4网(www.ki4.cn)!

标签:XML简明教程


欢迎 发表评论: