<?xml version="1.0" encoding="utf-8"?> <menu_config> <menu title="文章管理" url="~/Article" target="" allow=""> <submenu title="列表" url="~/Article/list" target="" allow=""/> <submenu/> <submenu title="新增" url="~/Article/add" target="" allow=""/> </menu> <menu/> <menu title="帳號管理" url="~/Admin"/> </menu_config>
menu_config.xsd 結構定義
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="menu_config"> <xs:complexType> <xs:sequence> <xs:element name="menu" type="menuType" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="menuType"> <xs:sequence> <xs:element name="submenu" type="menuType" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> <xs:attribute name="title" type="xs:string"/> <xs:attribute name="url" type="xs:string"/> <xs:attribute name="target" type="xs:string"/> <xs:attribute name="allow" type="xs:string"/> </xs:complexType> </xs:schema>
- element minOccurs
- 最少的出現次數,不設置為至少出現 1 次,設置 0 為可有可無。
- element maxOccurs
- 最大的出現次數,設置 unbounded 為無上限。
- attribute type
- 型別必須為 QName,常用的有 xs:string, xs:date, xs:int, xs:integer, xs:decimal, xs:boolean, xs:double, xs:float。
PHP
$xmlFile = 'menu_config.xml'; $xsdFile = 'menu_config.xsd'; /* 啟用自行錯誤處裡 */ libxml_use_internal_errors(true); $xml = new DOMDocument(); $xml->load($xmlFile); if (!$xml->schemaValidate($xsdFile)) { /* 顯示錯誤訊息 */ print_r(libxml_get_errors()); libxml_clear_errors(); }
C#
var menuConfig = XDocument.Load("menu_config.xml"); schemas.Add("", XmlReader.Create("menu_config.xsd")); menuConfig.Validate(schemas, (o, e) => { e.Message.Dump(); });
Java
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.SAXException; public class TestXsd { public static void main(String[] args) { File xsd = new File("menu_config.xsd"); File xml = new File("menu_config.xml"); try { SchemaFactory factory = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI ); Schema schema = factory.newSchema(xsd); Validator validator = schema.newValidator(); validator.validate(new StreamSource(xml)); System.out.println("xml is valid"); } catch (SAXException|IOException e) { System.out.println("Reason: " + e.getLocalizedMessage()); } } }
參考資料:
XML 結構描述項目 - MSDN
XML Schema Tutorial W3Schools
0 回應:
張貼留言