Tab Menu

Kiểm tra XML với XSD schema C# - Validate XML


Kiểm tra XML với XSD, Validate XML against xsd schema with C#, XML Validator Validate XML against xsd schema with C#
Chúng ta có một file xml, một ứng dụng đọc ghi nó bằng C# và một file xsd định nghĩa cấu trúc của xml. Vậy làm sao kiểm tra dữ liệu đọc lên từ file xml và dữ liệu thu được từ ứng dụng có phù hợp xsd schema của nó hay không?
Bài này s cùng các bạn sẽ tìm hiểu về điều đó.


Việc kiểm tra rất có ích với ứng dụng của chúng ta, nó giúp loại bỏ được những lỗi không mong muốn từ sự thay đổi của file XML. Bài viết này s chỉ đề cập việc kiểm tra trên XSD schema với cách ghi đọc qua đối tượng XmlDocument ở bài trước .
Đây là cách mà chúng ta kiểm tra nội dung có phù hợp với XSD từ việc đọc file XML @link
        private const string path = "books.xml";       
        private static XmlDocument xml;
        static XmlReader reader;
        public static XmlDocument Xml
        {
            get
            {
                if (xml == null)
                {
                    //s/ Validate against xsd file when load xml file.
                    XmlReaderSettings s = new XmlReaderSettings();
                    s.Schemas.Add("", "books.xsd");
                    s.ValidationType = ValidationType.Schema;
                    reader = XmlReader.Create(path, s);

                    xml = new XmlDocument();
                    xml.Load(reader);
                }
                return xml;
            }
        }

Còn đây là đây là phần validate dữ liệu trước khi chúng ta Save xuống file XML
public static string SaveFile()
        {
            try
            {
                ValidationEventHandler he = new ValidationEventHandler(ValidationHandler);
                Xml.Validate(he);              
                reader.Close();
                if (isErrors > 0)
                {
                    throw new Exception(ErrorMessage);
                }
                else {
                    Xml.Save(path);
                }
                
            }
            catch (Exception error)
            {
                // XML Validation failed
                //Console.WriteLine("XML validation failed." + "\r\n" + "Error Message: " + error.Message);
                return error.Message;
            }
            return "";    
        }    
        public static void ValidationHandler(object sender,ValidationEventArgs args)
        {
            ErrorMessage = ErrorMessage + args.Message + "\r\n";
            //s/ XML Validation failed
            isErrors++;
        }

Hiện có 7 comments

Anonymous

Cho mình hỏi tại sao khi lúc đầu nhập có lỗi nhưng sau đó nhập đúng thì hàm kiểm tra vẫn báo các lỗi lúc trước và không thực hiện lưu xuống file XML?

Salipro Phạm

Chào @Nặc danh , vấn đề đó là do khi bạn sửa lại giá trị đúng thì biến isErrors++ vẫn chưa được reset về 0. Bạn hãy sử thêm hàm bên dưới và gọi nó khi bạn đã Update hoặc Delete dữ liệu sai.

private static void ResetError()
{
isErrors = 0;
ErrorMessage = "";
}

Cám ơn sự góp ý của bạn! :x

SauCaCa

Cám ơn bạn đã giải đáp.
Thật ra lúc đầu mình cũng đã nghĩ và thử như trên nhưng không được, biến thì reset thành công nhưng lỗi cũ vẫn còn. Loay hoay mãi mà không biết xóa lỗi cũ kiểu j. Đây là chương trình của mình: ValidateXMLdemo. Bạn xem giúp mình.

SauCaCa

Mình làm được rồi. Thật ra ko chỉ reset biến mà còn phải reset cả XmlDocument nữa.

Salipro Phạm

Chúc mừng bạn @SauCaCa , bạn có thể chia sẻ cụ thể cách làm cho mọi người cùng tham khảo nhé?!

SauCaCa

@Salipro Phạm
Cũng là hàm ResetError() trên ta cho thêm "xml = null;" Đó là cách mình làm.

Salipro Phạm

Cám ơn sự đóng góp của @SauCaCa . Share to get more...

Post a Comment

Bạn có thể tự do cho ý kiến, thảo luận về bài viết này nhưng phải theo những điều khoản sau:
- Phải nghiêm túc, không dung tục, không spam.
- Nội dung phải liên quan đến bài viết.
- Không mang tính chất chính trị...
- Hạn chế sử dụng Ẩn danh, hãy dùng Tên/URL để thay thế.
Lưu ý : Có thể sử dụng tag HTML cơ bản trong comment: br, b, i, u, a href= ...

:)
:(
;)
:D
=))
:-/
:x
I-)
@-)
=D:
:-q
:-w
[-X
B-)
:((
:-B
:-h
:x(
:-*
~O)
@};-

About

RSS
Coming soon... :))