Heim  >  Artikel  >  Backend-Entwicklung  >  Kurzes XML-Tutorial (7)

Kurzes XML-Tutorial (7)

黄舟
黄舟Original
2017-02-18 15:39:281639Durchsuche

Inhaltsverzeichnis


Entwicklungsgeschichte

XMLVergleich mit HTML Extensible

XML und HTML-Vergleichssyntaxdetails

XML-Validierungs-DTD

XMLNamespace

XMLSyntaxstruktur

Schema für XML-Validierung

DOM4JKonfigurationsdatei lesen und schreiben

Über SLT

Schema für XML-Validierung



Wie im vorherigen Artikel erwähnt Ja, durch Mit der DTD können wir leicht beurteilen, ob das zu überprüfende XML den von uns definierten Spezifikationen entspricht (die Beziehung zwischen Elementen, ob die Werte der Attribute korrekt sind). Wenn wir jedoch den Inhalt von Elementen überprüfen möchten, ist die DTD machtlos. Also studieren die Leute eine neue Verifizierungsmethode – Schema.

Zusätzlich zu den oben genannten Vorteilen ist Schema noch beeindruckender als DTD Das Spannende ist, dass es sich um ein wohlgeformtes XML-Dokument handelt, sodass das Schreiben eines Schemas sehr einfach ist. Im Vergleich zu , das über eine eigene unabhängige Syntax verfügt, ist DTD sehr schwierig zu schreiben und zu warten.

Eine Schemadatei ist eine XML-Datei, daher entspricht das geschriebene XML dem SchemaDer Prozess besteht darin, XML gegen XML zu schreiben. In diesem Fall ist es sehr einfach, Schema zu schreiben. Im Folgenden wird gezeigt, wie das entsprechende Schema gemäß XML geschrieben wird

Original-XML-Datei (test2.xml)

Für das obige

XML unten beginnen wir mit der Erstellung eines

Schemas
<?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>

. Das zu befolgende Prinzip besteht darin, das ursprüngliche

XML

zu schreiben und dann das entsprechende

Schema

zu beschreiben, so als ob Sie einem gegenüber stünden Person. Die Beschreibung ist dieselbe. Der Schemacode lautet wie folgt (shiporder.xsd)

Codeanalyse:

Die erste Zeile ist alles XML

Die Aussage bedarf keiner weiteren Erläuterung.
 <?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>


Die zweite Zeile ist dieses

XML (

Schema

selbst ist ein XML) definiert einen Namensraum.

Ab der vierten Zeile sind einige Anforderungen für das ursprüngliche 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) 的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Kurzes XML-Tutorial (6)Nächster Artikel:Kurzes XML-Tutorial (6)