1. 程式人生 > >使用正則表示式進行xml資料驗證

使用正則表示式進行xml資料驗證

XML Schema是定義XML的資料定義檔案,以.xsd作為檔案的副檔名。它也以被用來定義一類XML檔案。

通常,一些特殊含義的資料不能通過系統預設的資料結構(型別)清楚地描述。
XML Schema 規範中宣告:可以通過facet來限制(restriction)簡單型別,從而產生一些新的原子型別(Atomic types)。
Facet有pattern, enumeration,等等;
這裡要說的是其中非常有用的一項是:
pattern+ 正則表示式語言(regular expression language)
結合正則表示式的強大功能,就可以進行一些複雜的資料結構的描述

Examples可以通過xmlspy, xmlwrite,或js/vbs 等進行驗證,下面舉出了js驗證的例子(需要msxml4.0支援)


有關定義 XML Schema 的資訊,可以在W3C 的 XML Schema 規範的第一部分中找到。有關內建資料型別及其可用的侷限性方面的資訊,請檢 查 XML Schema 規範的第二部分。關於 這兩部分 XML Schema 規範的簡易摘要,請檢視 W3C Primer on XML Schema


examples:

/*** examples.xml ***/
<?xml version="1.0" encoding="gb2312"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="examples.xsd">
    <user>
  <name>test</name>
  <email>

[email protected]</email>
  <ip>127.0.0.1</ip>
  <color>#000000</color>
    </user>
    <user>
  <name>guest</name>
  <email>[email protected]</email>
  <ip>202.102.224.25</ip>
  <color>#FFFFFF</color>
    </user>   
</root>


/*** examples.xsd ***/
<?xml version="1.0" encoding="gb2312"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="root" type="Root"/>

<xsd:complexType name="Root">
 <xsd:sequence>
  <xsd:element name="user"  type="User" minOccurs="0" maxOccurs="unbounded" />
 </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="User">
 <xsd:sequence>
  <xsd:element name="name" type="xsd:string"/>
  <xsd:element name="email" type="Email" />
  <xsd:element name="ip" type="IP" />
  <xsd:element name="color" type="Color" />
 </xsd:sequence>
</xsd:complexType>

<xsd:simpleType name="Email">
 <xsd:restriction base="xsd:string">
  <xsd:pattern value="([a-zA-Z0-9_/-/.]+)@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.)|(([a-zA-Z0-9/-]+/.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(/]?)"/>
 </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="IP">
 <xsd:restriction base="xsd:string">
  <xsd:pattern value="(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])"/>
 </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="Color">
 <xsd:restriction base="xsd:string">
  <xsd:pattern value="#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?"/>
 </xsd:restriction>
</xsd:simpleType>

</xsd:schema>


/*** examples.htm ***/
<SCRIPT LANGUAGE="javaScript">
function validate()
{
 var oXML ;
 var nParseError;
 var sReturnVal;

 oXML = new ActiveXObject("MSXML2.DOMDocument.4.0") ;
 oXML.async = false ;
 oXML.validateOnParse = true;

 oXML.load("examples.xml") ;

 nParseError = oXML.parseError.errorCode ;
 sReturnVal = "" ;

 if (0 != nParseError)
 {
  //參看書籍教程中parseError物件屬性
  sReturnVal = sReturnVal + "程式碼:" + oXML.parseError.errorCode + "/n" ;
  sReturnVal = sReturnVal + "錯誤原因:" + oXML.parseError.Reason + "/n" ;
  sReturnVal = sReturnVal + "錯誤字串:" + oXML.parseError.srcText + "/n" ;
  sReturnVal = sReturnVal + "錯誤行號" + oXML.parseError.line + "/n" ;
  sReturnVal = sReturnVal + "錯誤列數:" + oXML.parseError.linepos + "/n" ;
 }
 else
 {
  sReturnVal = sReturnVal + "驗證通過!"
 }

  alert(sReturnVal);
}

function window.onload()
{
 validate();
}
</SCRIPT>


:_)

相關推薦

使用表示式進行xml資料驗證

XML Schema是定義XML的資料定義檔案,以.xsd作為檔案的副檔名。它也以被用來定義一類XML檔案。 通常,一些特殊含義的資料不能通過系統預設的資料結構(型別)清楚地描述。XML Schema 規範中宣告:可以通過facet來限制(restriction)簡單型別,從

使用表示式xml檔案中資料字典進行整理

在工作中,需要對xml檔案中資料字典進行整理。 SQL> create table t1(text varchar2(4000)); 表已建立。 SQL> insert into t1 values(' <enumeration id

JavaScript表示式與表單驗證

一.非空驗證 判斷非空 最好還是不要使用trim()方法 有的瀏覽器可能不支援 推薦使用正則表示式 判斷是否為空 // " abc "----->"abc "------>"abc"function trim (txt) { var afterText = txt.replace(/^\s*

Python爬蟲之使用表示式抓取資料

目錄 匹配標籤 匹配title標籤 a標籤 table標籤 匹配標籤裡面的屬性 匹配a標籤裡面的URL 匹配img標籤裡的 src 相關文章:Linux中的正則表示式             &nbs

javaScript各種表示式-用於表單驗證

<script type="text/javascript">      function validate(){        var reg = new RegExp("^[0-9]*

Source Insight中使用表示式進行高階替換

        問題描述:         程式碼中有個斷言函式,假設叫MyAssert,只有一個引數,用法例如: MyAssert(a >

利用表示式進行字串替換(replace方法)

語法 str.replace(regexp|substr, newSubStr|function) 引數 regexp(pattern) 一個RegExp物件或者其字面量。該正則所匹配的內容會被第二個引數的返回值替換掉。 substr(pattern) 一個要被 newSubStr 替換

Word中使用表示式進行查詢和替換(高效進行文書處理)

術語 開始前,我們先定義一對術語: 萬用字元指的是您可以用來代表一個或多個字元的鍵盤字元。例如,星號 (*) 通常代表一個或多個字元,問號 (?) 通常代表單個字元。 對我們來說,正則表示式指的是您可以用來查詢和替換文字模式的文字字元和萬用字元組合。文字字元指的是必須存在於目標文

EXCEL VBA 使用表示式清洗替換資料

在EXCEL表內遇到有規律性的資料需要提取或者替換時,比如在資料中提取時間,身份證號碼等,EXCEL內自帶的查詢替換就難以實現,我們可以利用VBA適用正則表示式去對資料進行匹配。 什麼是正則表示式? 正則表示式,又稱規則表示式。(英語:Regular Expression,在程式碼中常簡

java利用表示式提取年月日資料

package com.amarsoft.court.app.util; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.regex

jmeter表示式獲取指定資料

//此文章為記錄怎麼從伺服器返回資料中獲取指定的第幾個資料。//返回的資料//獲取的資料備註:查詢過文章,文章顯示在模板後面的$x$的x代表獲取第幾個資料。          但是在實際使用中發現:匹配數字代表獲取第幾個資料,當為0時,為隨機;當為1時,顯示第1個;當為2時,

python----使用re表示式刷選資料,去重,列表,取特定行資料(適用於web的html回包資料提取)

python—-使用re正則表示式刷選資料,去重,列表,取特定行資料(適用於web的html回包資料提取) 環境配置:對目標伺服器的日誌檔案進行刷選特定資料(192.168.4.27) /usr/

MFC利用表示式進行密碼匹配

最近用到MFC中對密碼進行驗證,因此對正則表示式進行了簡單的研究,總結如下: 1. 標頭檔案支援:  #include <regex> 2. std::regex不支援CString型別的模式設定和字串匹配,需要進行轉換, 可以考慮將其轉換為std::stri

WHERE子句使用表示式進行搜尋過濾

正則表示式:在列值內進行匹配(萬用字元匹配整列) 1基本字元匹配 SELECT prod_name FROM products WHERE prod_name REGEXP ‘1000’ ORDER BY prod_name; SELECT p

表示式進行大陸手機號碼規則校驗

1.十一位 2.以13*、18*、15*(除了154)、145、147開頭 <script type="text/javascript"> function checkMobileNo(){ var s=/^((1[38])\d)|(15[0-35-9])|(1

表示式常用的資料判斷

參考網址 :https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 一、校驗數字的表示式  1 數字:^[0-9]*$  

C++利用表示式進行字串的替換

主要要加上標頭檔案#inlcude,這也是劍指offer上的題目 void replaceSpace(string str,int length) { string pattern=" "; regex re(p

利用表示式反向選擇資料

最近有朋友問如何在檔案中選擇不包含諸如1900、1901、……1999字串的行,目標檔案中所有資料都是由數字字元組成。如果使用 grep 這樣的工具,只用寫很一個非常簡單的正則表示式就能解決問題:grep -v '19/d/d' target_file grep 的 -v 選

python表示式進行字串的查詢

python進行字串的查詢,查找出現的位置 import re ####列表返回 pattern=re.compile(r'\d+') re1=pattern.findall('run 123 and 456') print(re1) ######迭代器返回 i

Objective-C利用表示式進行搜尋時關鍵字的轉義

利用正則表示式進行搜尋時如果不對正則關鍵字進行轉義常常會造成搜尋結果的錯誤,如輸入?就會匹配到全部結果,就需要對搜尋關鍵字進行轉義處理: 匹配輸入字符串的結尾位置。如果設置了RegExp對象的Mult