>  기사  >  백엔드 개발  >  XML 간결 튜토리얼 (7)

XML 간결 튜토리얼 (7)

黄舟
黄舟원래의
2017-02-18 15:39:281652검색

목차


개발 내역

XML비교 HTML 확장 가능

XML 및 HTML 비교 구문 세부 정보

XML 유효성 검사 DTD

XML네임스페이스

XML구문 구조

XML 검증을 위한 스키마

DOM4J구성 파일 읽기 및 쓰기

SLT 정보

XML 유효성 검사를 위한 스키마



이전 기사에서 언급했듯이 예, DTD 검증할 XML이 우리가 정의한 사양(요소 간의 관계, 속성 값이 올바른지 여부)과 일치하는지 쉽게 판단할 수 있지만, 요소의 내용을 검증하려는 경우 DTD는 무력합니다. 그래서 사람들은 새로운 검증 방법인 스키마를 연구합니다.

위의 장점 외에도 스키마DTD보다 훨씬 인상적입니다. 흥미로운 점은 그 자체가 잘 구성된 XML 문서이므로 스키마 작성이 매우 쉽다는 점입니다. 독자적인 구문 을 갖는 에 비해 DTD 는 작성 및 유지 관리가 매우 어렵습니다.

스키마 파일은 XML 파일이므로 작성된 XML스키마에 해당합니다. 🎜 >XML을 XML에 대해 작성하는 과정입니다. 이 경우 Schema를 작성하는 것은 매우 쉽습니다. 다음은 XML

원본 XML 파일(test2.xml)에 따라 해당 Schema를 작성하는 방법을 보여줍니다.

아아앙




위의 경우 XML 다음으로 스키마 생성을 시작합니다. 따라야 할 원칙은 원본 XML을 작성한 후 해당 스키마를 기술하는 것입니다. 사람. 설명은 동일합니다.

스키마 코드는 다음과 같습니다(shiporder.xsd)

<?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 이 진술에는 자세한 설명이 필요하지 않습니다.

두 번째 줄은 XML입니다. (Schema 자체는 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) 的内容,更多相关内容请关注PHP中文网(www.php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.