2013年8月20日 星期二

C# 如何使用XSD (XML Schema Definition)驗證XML內容

from http://www.dotblogs.com.tw/ken12/archive/2012/04/10/71392.aspx


STEP 1. 從應用程式執行 "Visual Studio 命令提示字元 (2010)"
此步驟或許需系統管理員身份執行, 以確保權限足夠.



STEP 2. 建立XML檔
建立待轉換的XML檔內容, 檔名為Query.xml, 存至C:\
<?xml version="1.0" encoding="UTF-8" ?>
<Root>
    <Data>
        <MerchantID></MerchantID>
        <MerchantTradeNo></MerchantTradeNo>
        <QueryDate></QueryDate>
    </Data>
</Root>



STEP 3. 將XML檔轉換成XSD檔
執行以下指令, 假設XML檔名為Query.xml
xsd C:\Query.xml /O:C:\
將xml檔轉換成xsd檔, 並儲存在C:\.

XSD參數運用請參考:
http://msdn.microsoft.com/zh-tw/library/x6c1kb0s(v=VS.80).aspx



STEP 4. 修改XSD檔, 以符合格式驗證要求
產生的Query.xsd檔內容如下.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Root" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Root" msdata:IsDataSet="true" msdata:Locale="en-US">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Data">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="MerchantID" type="xs:string" minOccurs="0" />
              <xs:element name="MerchantTradeNo" type="xs:string" minOccurs="0" />
              <xs:element name="QueryDate" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>



STEP 7. 透過XDocument驗證XML內容
使用XDocument需要加入以下的Namespace.
using System.Xml.Schema;
using System.Xml.Linq;

透過try catch可確認是否驗證失敗
try
{
    XDocument xDoc = XDocument.Parse("需驗證的XMLData String");
    XmlSchemaSet schemas = new XmlSchemaSet();
    schemas.Add(string.Empty, "xsd位置");
    xDoc.Validate(schemas, null);
}
catch (Exception)
{
    return false;
}
null的部份可以改為使用Lambda Expression取得, 如下.
(o, e) =>{
    Console.WriteLine(e.Message);
}

0 意見:

張貼留言

 

MangoHost Copyright © 2009 Cookiez is Designed by Ipietoon for Free Blogger Template