Ví dụ về tệp xml gồm 440 mục. Lược đồ XML là một tiêu chuẩn công nghiệp để mô tả các tài liệu XML

Đôi khi việc hiểu tệp XML được gửi đến phòng địa chính chỉ đơn giản là cần thiết khi bạn cảm thấy cần phải sửa một cái gì đó ở đâu đó và nhiều người có bản tính tò mò phát triển. Nhưng... quan trọng. Hãy nhớ rằng sau khi ký vào tệp chữ ký số, bạn không thể chỉnh sửa tệp XML! Lấy một ví dụ từ thực tế, khi chia một ô thành 300 đơn vị bộ nhớ, một cô gái đã vô tình xóa chỉ một dòng trong địa chỉ của một trong các ô. Và chỉ vậy thôi... Tệp XML đã không vượt qua được quá trình xác minh. Việc tìm kiếm trong tất cả các mục trong chương trình có vẻ tẻ nhạt đối với tôi, đặc biệt là vì tôi biết mình cần tìm gì. Sau khi mở tệp XLM trong trình chỉnh sửa thử nghiệm bằng cách tìm kiếm, tôi đã tìm thấy dòng được yêu cầu và thực hiện các thay đổi. Nhưng một lần nữa, tôi nhắc lại - nếu bạn đã chỉnh sửa tệp, thì bạn cần ký lại bằng chữ ký điện tử của mình. Vậy hãy bắt đầu. Tôi sẽ trình bày các bản vẽ và viết mô tả cho chúng.

Và một lần rút lui nữa, để chỉnh sửa và xem các tệp XML một cách thuận tiện Tôi khuyên bạn nên sử dụng chương trình. Nó sẽ cho phép bạn xem cấu trúc của tệp và tô màu nó theo các giá trị một cách thuận tiện. Ví dụ: tôi sẽ lấy một giá treo khăn tắm bằng điện cho phòng tắm, tất nhiên, không phải của anh ấy -), mà là một tệp XML để hình thành 2 đơn vị bộ nhớ bằng cách phân bổ một phần quyền sở hữu chung cho một bộ nhớ thiết bị có số địa chính….
Để làm ví dụ, trước tiên tôi sẽ hiển thị hình ảnh của tệp XML được thu gọn với một khối được thu gọn.

Vì vậy, đánh giá bằng bộ đếm dòng nằm ở bên trái, chúng ta có một tệp gồm 336 dòng. Như có thể thấy trên hình, khối Đã thu gọn, biểu tượng dấu cộng ở bên phải. Do đó, trước tiên tôi sẽ mô tả từng dòng những gì có thể nhìn thấy từ hình này và sau đó chúng tôi sẽ phân tích các khối có trong khối Bởi vì nó là đồ sộ nhất.

Chúng tôi sẽ không xem xét toàn bộ từng dòng tệp mà sẽ chỉ xem xét những dòng mà dữ liệu của chúng tôi được nhập vào.

3 dòng : CodeType=”014″ – loại công việc, chỉ có hai trong số đó, như trong trường hợp của chúng tôi – giáo dục và “015” – làm rõ. Phiên bản=”03″ – Phiên bản tệp XML. GUID (Mã định danh duy nhất toàn cầu) ​​là mã định danh 128 bit duy nhất về mặt thống kê; trong trường hợp của chúng tôi, tên tệp phải khớp với chỉ báo này.
4 dòng : Dữ liệu từ tổ chức nơi kỹ sư địa chính làm việc hoặc dữ liệu từ chính kỹ sư địa chính.
5 dòng : Mã của tổ chức nhận, trong trường hợp này là Văn phòng Dịch vụ Đăng ký Nhà nước, Địa chính và Bản đồ Liên bang của Cộng hòa Tatarstan.

Bây giờ chúng ta hãy đi ngay đến cuối tệp, dựa trên hình được trình bày và xem khối . Trong khối này, thông tin về kỹ sư địa chính thực hiện công việc được nhập vào. Tiếp theo là khối chứa hệ tọa độ. Nhân tiện "trong các giá trị văn bản của một tệp, chúng được biểu thị bằng dấu ngoặc kép.

Về nguyên tắc, khi mở một tệp trong Notepad++, toàn bộ cấu trúc của tệp XML sẽ trở nên rõ ràng. – Vị trí – chứa địa chỉ. Giá trị trong được viết khi một phần địa chỉ bị thiếu trong KLADR.

Một ví dụ về tệp XML bản đồ quy hoạch được tạo trong sản phẩm phần mềm kế hoạch Bản đồ đa giác

Để xem đoạn này rõ ràng hơn, hãy sao chép nó và xem nó trong trình chỉnh sửa kiểm tra Notepad++, bạn có thể tải xuống từ phần này

Bằng cách nhầm lẫn phương tiện với mục đích, con người trở nên thất vọng về bản thân và người khác, kết quả là mọi hoạt động của họ đều không đạt được kết quả gì hoặc điều ngược lại với những gì họ phấn đấu đạt được.I. Goethe

Chương này sẽ chỉ cho bạn cách viết các lược đồ XML. Bạn cũng sẽ biết rằng sơ đồ có thể được viết theo nhiều cách khác nhau.

tài liệu XML

Hãy xem tài liệu XML sau có tên "shiporder.xml":

John Smith Ola Nordmann

Langgt 23
4000 Stavanger Na Uy Đế chế khôi hài Phiên bản đặc biệt 1 10.90 Giấu trái tim của bạn 1 9.90

Tài liệu XML ở trên bao gồm một phần tử gốc vận chuyển đơn hàng với thuộc tính bắt buộc thứ tự . Yếu tố vận chuyển đơn hàng chứa ba phần tử con: người đặt hàng, tàumục. Yếu tố mụcđược sử dụng hai lần và chứa phần tử tiêu đề, phần tử tùy chọn ghi chú, cũng như các phần tử Số lượnggiá.

Đường kẻ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" báo cho trình phân tích cú pháp XML rằng tài liệu này phải được xác thực dựa trên lược đồ. Đường kẻ xsi:noNamespaceSchemaLocation="shiporder.xsd" cho biết chính xác vị trí của lược đồ (trong trường hợp này nó nằm trong cùng thư mục với tệp "shiporder.xml").

Tạo một lược đồ XML

Bây giờ hãy tạo một lược đồ XML cho tài liệu XML ở trên.

Hãy tạo một tệp mới mà chúng ta sẽ gọi là "shiporder.xsd". Để tạo một lược đồ XML, chúng ta chỉ cần tuân theo cấu trúc của tài liệu XML và xác định từng phần tử mà chúng ta gặp phải. Hãy bắt đầu với một khai báo XML tiêu chuẩn, theo sau là mô tả phần tử xs:lược đồ , trong đó xác định chính lược đồ:

...

Ở đây chúng tôi sử dụng không gian tên tiêu chuẩn ( xs ) và URI được liên kết với không gian tên đó, có nghĩa chuẩn http://www.w3.org/2001/XMLSchema .

Bây giờ chúng ta cần xác định phần tử vận chuyển đơn hàng. Phần tử này có một thuộc tính và nó chứa các phần tử khác, vì vậy chúng tôi coi nó như một phần tử của loại tổng hợp. Định nghĩa phần tử con vận chuyển đơn hàng chúng tôi sẽ đưa nó vào tờ khai xs:trình tự , trong đó chỉ định một chuỗi các phần tử con cứng nhắc:

...

Bây giờ hãy xác định phần tử người đặt hàng, sẽ có kiểu đơn giản (vì nó không chứa bất kỳ thuộc tính hoặc phần tử nào khác). Loại của nó ( xs:chuỗi ) có tiền tố là không gian tên được liên kết với lược đồ XML, biểu thị việc sử dụng kiểu dữ liệu được xác định trước:

Bây giờ chúng ta cần xác định: tàumục. Hãy bắt đầu với định nghĩa phần tử tàu:

Với sự trợ giúp của sơ đồ, chúng ta có thể xác định bất kỳ yếu tố nào. Các thuộc tính sẽ giúp chúng ta điều này maxXảy ra phútXảy ra . Thuộc tính maxXảy ra chỉ định số lần xuất hiện tối đa của một phần tử và thuộc tính phútXảy ra chỉ định số lần xuất hiện tối thiểu. Giá trị mặc định cho cả hai thuộc tính là 1.

Bây giờ hãy xác định phần tử mục. Phần tử này có thể được sử dụng không giới hạn số lần trong một phần tử vận chuyển đơn hàng. Xác định tính năng như vậy của một phần tử mục cho phép gán cho một thuộc tính maxXảy ra giá trị "không ràng buộc" . Điều này có nghĩa là phần tử mục có thể được sử dụng nhiều lần tùy theo nhu cầu của tác giả tài liệu. Xin lưu ý rằng phần tử ghi chú không bắt buộc. Hãy xác định điều này bằng cách đặt thuộc tính phútXảy ra về giá trị 0:

Bây giờ chúng ta có thể khai báo thuộc tính phần tử vận chuyển đơn hàng. Vì đây là thuộc tính bắt buộc nên chúng tôi sử dụng định nghĩa sử dụng="bắt buộc" .

Lưu ý: Các thuộc tính phải luôn được khai báo sau cùng:

Đây là mã hoàn chỉnh cho tệp lược đồ "shiporder.xsd":

Phân chia lược đồ

Phương pháp sắp xếp sơ đồ trước đây rất đơn giản, tuy nhiên, khi tài liệu khá phức tạp, với phương pháp này, sơ đồ tương ứng có thể trở nên khá cồng kềnh, điều này sẽ ảnh hưởng lớn đến việc dễ đọc và bảo trì.

Cách tiếp theo để bố trí sơ đồ là trước tiên xác định tất cả các phần tử và thuộc tính, sau đó liên kết với các định nghĩa này bằng thuộc tính giới thiệu .

Dưới đây là bố cục mới của tệp lược đồ ("shiporder.xsd"):

Sử dụng các loại được đặt tên

Cách thứ ba để bố trí sơ đồ bao gồm việc xác định các lớp hoặc kiểu cho phép sử dụng lại các định nghĩa phần tử. Điều này trở nên khả thi bằng cách đặt tên cho các phần tử loại đơn giản các loại phức tạp , sau đó trỏ tới chúng bằng thuộc tính kiểu .

Cách thứ ba để bố trí tệp lược đồ ("shiporder.xsd"):

Yếu tố sự hạn chế chỉ ra rằng kiểu dữ liệu được lấy từ các kiểu dữ liệu trong không gian tên Lược đồ XML của W3C. Vì vậy, đoạn mã sau có nghĩa là giá trị của phần tử hoặc thuộc tính phải là một chuỗi:

Tuy nhiên, thường thì phần tử sự hạn chếđược sử dụng để đặt các hạn chế đối với các phần tử. Nhìn vào các dòng sau từ sơ đồ trên:

Đoạn mã này chỉ định rằng giá trị của một phần tử hoặc thuộc tính phải là một chuỗi, có độ dài chính xác là sáu ký tự và các ký tự đó phải là các số từ 0 đến 9.

1. Giới thiệu

Nếu bất kỳ ai trong số các bạn đã từng cố gắng tự học XML, có thể bạn đã gặp phải nhiều khái niệm khó hiểu giống như tôi đã gặp trước đây. DTD, Lược đồ XML, không gian tên, XPath, XPointers, XSL, XSLT, DOM, SAX, SOAP, tôi từ bỏ. Tôi sẽ chỉ nói thêm rằng hầu hết các tài liệu này đều dựa trên việc triển khai, mã của chúng có thể có lỗi. Có lẽ có hàng triệu cách để triển khai và sử dụng XML nhưng tất cả chúng đều khá phức tạp. Và bạn biết đấy, XML có thể rất đơn giản. Nếu chúng ta quên DTD, Lược đồ XML, không gian tên, v.v.
Trong nỗ lực nhanh chóng hướng dẫn bạn cách làm việc với XML, nếu có thể, tôi sẽ bỏ qua một lượng thông tin kha khá mà bạn có thể đọc trong tài liệu liên quan. Và điều đầu tiên tôi sẽ bỏ qua là không gian tên và lược đồ. Điều này có vẻ lạ đối với bạn, vì hầu hết các cuốn sách đều bắt đầu bằng cách giải thích những khái niệm này, nhưng hãy thử nghĩ về XML như một phương tiện để giải quyết một vấn đề cụ thể, giống như một cái búa. Bạn có thực sự cần biết cách xây nhà để sử dụng búa không? Điều gì sẽ xảy ra nếu tất cả những gì tôi cần chỉ là đóng đinh để treo một bức tranh lên? Điều này cũng tương tự với XML, nó có thể rất phức tạp, đủ chung chung để được sử dụng trong hàng trăm, thậm chí hàng nghìn ứng dụng, và rất đơn giản nếu bạn không chú ý đến một số thứ. Trong bài viết này, tôi sẽ tập trung giải quyết các vấn đề cụ thể bằng cách sử dụng XML.
vậy chính xác vấn đề là gì? Giả sử rằng tôi muốn mô tả một đối tượng đơn giản, chẳng hạn như chiếc cốc, bằng cách sử dụng XML. Tại sao tôi lại sử dụng XML cho việc này? Vâng, trước hết, đó chính xác là mục đích XML được thiết kế. XML mô tả dữ liệu. Trong ví dụ của tôi, chiếc kính là dữ liệu. Trong thực tế, dữ liệu có thể là tài liệu Word, bảng tính, hình ảnh, sách, bản ghi cơ sở dữ liệu hoặc thậm chí là các lớp C++ hoặc Visual Basic. Thứ hai, XML có khả năng mở rộng. XML cho phép tôi tạo nhiều tính năng cần thiết để mô tả dữ liệu và những tính năng này sẽ là bất cứ thứ gì tôi muốn. Và cuối cùng, vì XML đang nhanh chóng trở thành một tiêu chuẩn. Nếu có sự sống trên sao Hỏa thì bạn có thể chắc chắn rằng họ sẽ có thể hiểu được tệp XML của tôi ở đó.

Những đặc tính cơ bản nào cho phép chúng ta mô tả một chiếc kính?

Điều tương tự sẽ trông như thế nào ở định dạng XML?

thủy tinh 6 16 khối băng Rơm rạ Nước Đúng

Lưu ý rằng dòng đầu tiên của tệp () hiện có giao diện đặc biệt, chỉ cần nhớ rằng nó phải ở đây. Cái hay của định dạng XML là bất kỳ ai cũng có thể hiểu được nội dung của nó chỉ bằng cách xem xét kỹ. Cũng rõ ràng rằng đây không phải là mô tả XML duy nhất có thể có về kính. Nếu tôi yêu cầu 10 người phát triển một mô tả XML về một chiếc kính có cùng đặc tính, họ có thể sẽ tạo ra các mô tả khác nhau nhưng chính xác. Đây là chỗ có vấn đề. Có lẽ điều này không dành cho con người chúng ta, nhưng khi máy tính đọc một tệp XML, sẽ là một ý tưởng tuyệt vời nếu bạn cho nó biết tệp đó nói về cái gì. Đây là nơi các không gian tên và sơ đồ phát huy tác dụng. Nói một cách đơn giản, các lược đồ được sử dụng để xác định cấu trúc phù hợp cho một tệp XML.
Bây giờ là lúc nói về một vài quy tắc XML đơn giản mà bạn cần tuân theo:

Quy tắc XML số 1: Một tệp XML hợp lệ phải khớp chính xác với lược đồ của nó. Nhưng để dễ hiểu tài liệu, không có ví dụ nào của tôi sử dụng sơ đồ. Vì vậy, nói đúng ra, không có ví dụ nào của tôi là "đầy đủ". Nhưng thành thật mà nói, tôi không quan tâm. Tôi không định xây nhà, tôi chỉ cần treo một bức tranh thôi. Tôi sẽ nói nhiều hơn về điều này sau khi chúng ta thảo luận về Mô hình đối tượng tài liệu XML.

Quy tắc XML số 2 Lưu ý: Nếu bạn lập trình bằng VB, hãy nhớ: XML phân biệt chữ hoa chữ thường. XML phân biệt chữ hoa chữ thường. XML phân biệt chữ hoa chữ thường. XML phân biệt chữ hoa chữ thường. Viết câu này 1000 lần và bạn sẽ không bao giờ quên.

Quy tắc XML số 3: Thẻ thường được gọi là phần tử và mỗi thẻ mở phải có một thẻ đóng tương ứng. Tuân theo quy tắc này, bạn sẽ nhận được một tệp XML chính xác. Điều này rất quan trọng vì cho đến khi tệp XML được định dạng chính xác, nó sẽ không được phân tích cú pháp và tải vào Mô hình Đối tượng Tài liệu. Lưu ý rằng nếu phần tử không chứa giá trị và không chứa các phần tử (lồng nhau) khác, thẻ đóng có thể trông giống như thay vì một thiết kế cồng kềnh hơn . Bạn có thể thấy cách tiếp cận này trong ví dụ trước ( ).

Quy tắc XML số 4: Các phần tử có thể chứa các thuộc tính và các giá trị thuộc tính phải được đặt trong dấu ngoặc kép (đơn hoặc kép).

Quy tắc XML số 5: Bạn có thể sử dụng tên thuộc tính nhiều lần nhưng tên thành phần phải là duy nhất trong toàn bộ tệp. Trong ví dụ trước, thuộc tính qty có ý nghĩa khác tùy thuộc vào thành phần nào nó được sử dụng trong ,, hoặc . Ý nghĩa của một thuộc tính phụ thuộc vào ngữ cảnh sử dụng nó. Trong khi đó, giá trị của một phần tử luôn có cùng một ý nghĩa, bất kể thuộc tính đó nằm ở đâu trong tệp. Trong ví dụ trước, phần tử luôn có cùng một ý nghĩa trong suốt tài liệu của chúng tôi. ví dụ, luôn được sử dụng để mô tả chiều cao của một cái ly.

Quy tắc XML số 6: Có một số ký tự đặc biệt trong XML không thể sử dụng trực tiếp vì chúng được bảo lưu trong cú pháp XML. Do đó, để sử dụng các ký tự như vậy, bạn sẽ phải sử dụng cấu trúc dành riêng bắt đầu bằng ký tự & và một mã đặc biệt, (ký tự & phải được viết là &) (ký tự " phải được viết là") (ký tự< должен писаться как <) (символ >phải được viết là >) và (ký hiệu " phải được viết là "). Thay vào đó, bạn cũng có thể sử dụng hướng dẫn, trong đó "...." có thể là bất kỳ chuỗi ký tự nào ngoại trừ "]]>". Cấu trúc này có thể xuất hiện ở bất cứ đâu, nhưng nó không thể được lồng vào nhau.

2. Mô hình đối tượng tài liệu XML

Mô hình đối tượng tài liệu XML cho phép người lập trình tải nội dung của tệp XML vào bộ nhớ. Khi một tệp XML được tải theo cách này, nó có thể được thao tác bằng cách sử dụng các thuộc tính, phương thức và sự kiện của Mô hình Đối tượng Tài liệu. Đây là lúc XML có ích. Mô hình Đối tượng Tài liệu hỗ trợ rất nhiều cho việc truy xuất và xử lý thông tin tệp XML. Ở đây tôi sẽ không nói về tất cả các khả năng của mô hình đối tượng tài liệu; tôi sẽ chỉ nói về một số tính năng chính sẽ giúp đạt được mục tiêu của bài viết này. Tôi sẽ lấy tệp XML mà tôi vừa tạo để mô tả chiếc kính, tải nó vào Mô hình Đối tượng Tài liệu và thực hiện một số thao tác với nó. Tôi sẽ lưu các tính năng và khả năng còn lại của mô hình đối tượng tài liệu cho bài viết tiếp theo nói về XML máy khách. Lưu ý rằng mặc dù mô hình đối tượng tài liệu rất tốt và thuận tiện cho các nhà phát triển nhưng nó đòi hỏi một lượng tài nguyên hệ thống khá đáng kể. Vì vậy, có một phương pháp khác để phân tích cú pháp các tệp XML, được gọi là SAX. Bài viết của tôi không khẳng định mình là nguồn thông tin đầy đủ về vấn đề này, vì vậy sẽ rất hữu ích nếu sử dụng XML SDK.

Hãy xem một ví dụ sử dụng trình phân tích cú pháp XML của Microsoft phiên bản 3.0 (msxml3.dll) để hiểu cách thức hoạt động của nó. Nếu bạn không có máy phân tích, bạn có thể tải xuống phiên bản mới nhất từ ​​trang web của Microsoft.
Giả sử tôi đã lưu một ví dụ về mô tả cốc ở định dạng XML trong tệp "http://web_server/xml/cup.xml" (đường dẫn cục bộ C:\inetpub\wwwroot\xml\cup.xml) và bây giờ tôi muốn tải nó vào mô hình đối tượng tài liệu. Đoạn mã sau giả định rằng máy phân tích đã được tải và đang chạy.

Mã Visual Basic 6.0:(thiết lập kết nối với Microsoft XML, v3.0) Dim xmlDoc dưới dạng MSXML2.DOMDocument30 Đặt xmlDoc = DOMDocument30 mới xmlDoc.async = Sai xmlDoc.validateOnParse = Sai xmlDoc.load ("c:\inetpub\wwwroot\xml\cup.xml" ) msgBox xmlDoc.xml Mã phía máy chủ ASP trong Visual Basic: Dim xmlDoc Đặt xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0") xmlDoc.async = Sai xmlDoc.validateOnParse = Sai xmlDoc.load "/xml/cup.xml" Mã phía máy chủ ASP trong Java Script: var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0"); xmlDoc.async = false; xmlDoc.validateOnParse = false; xmlDoc.load("/xml/cup.xml");

Giải thích đoạn mã trên - hãy xem qua mã VB6

Dòng 1: Dim xmlDoc dưới dạng MSXML2.DOMDocument30

Trong dòng đầu tiên này, chúng tôi xác định tham chiếu đến "Microsoft XML, v3.0". Trong dòng này, tôi đã xác định biến xmlDoc làm tham chiếu đến tài liệu XML. MSXML2 là một thư viện (hãy sử dụng tên đó, đừng cố viết MSXML3, nó sẽ không hoạt động). DOMDocument30 định nghĩa một đối tượng tài liệu XML tương ứng với phiên bản 3.0. Bạn cũng có thể thấy mã này: dim xmlDoc as MSXML2.DOMDocument. Cấu trúc này thường được sử dụng khi bạn không muốn chỉ định một phiên bản cụ thể của tài liệu XML. Trong trường hợp này, máy phân tích mặc định đã đăng ký trong hệ thống sẽ được sử dụng. Vấn đề duy nhất có thể là phiên bản máy phân tích được đăng ký theo mặc định có thể khác nhau trên các máy tính khác nhau. Nếu bạn muốn chắc chắn rằng mã bạn viết sẽ hoạt động với bất kỳ phiên bản nào của máy phân tích thì không sử dụng các cấu trúc dành riêng cho các phiên bản cụ thể của máy phân tích. Bởi vì không có gì đảm bảo rằng người dùng sẽ sử dụng mã của bạn sẽ cài đặt cùng một phiên bản máy phân tích mà bạn đã viết mã. Một ưu điểm khác của việc phát triển mã là phiên bản độc lập với máy phân tích là khi phiên bản mới hơn của máy phân tích được phát hành, nó sẽ tương thích ngược với các phiên bản trước đó và bạn sẽ không phải biên dịch lại mã của mình.

Dòng 2:Đặt xmlDoc = DOMDocument30 mới

Dòng này khởi tạo biến xmlDoc dưới dạng một phiên bản mới của đối tượng tài liệu XML phiên bản 3.0.

Dòng 3: xmlDoc.async = Sai

Các tệp XML có thể được tải đồng bộ hoặc không đồng bộ. Nếu xmlDoc.async = False, điều đó có nghĩa là nội dung của tệp XML sẽ được tải và chỉ sau đó điều khiển đó mới được chuyển sang quá trình gọi. Nếu xmlDoc.async = True thì có nghĩa là quyền điều khiển sẽ được chuyển sang tiến trình gọi ngay lập tức mà không cần đợi cho đến khi nội dung của tệp XML được tải hoàn toàn.

Dòng 4: xmlDoc.validateOnParse = Sai

Mã này chỉ ra rằng trình phân tích cú pháp không nên xác thực tệp XML đang được tải dựa vào lược đồ của nó (validateOnParse = False). Để kích hoạt tính năng kiểm tra tuân thủ lược đồ, bạn cần viết validOnParse = True.

Dòng 5: xmlDoc.load("C:\inetpub\wwwroot\xml\cup.xml")

Dòng này gọi một phương thức để tải tệp XML đã chỉ định. Có hai loại phương pháp tải. Cái đầu tiên, được viết ở dòng 5, tải tệp vào mô hình đối tượng tài liệu và cần phải chuyển đường dẫn đầy đủ đến tệp XML. Tùy chọn tải thứ hai liên quan đến việc chuyển chuỗi xml làm tham số. Ví dụ, kiểu tải này có thể được gọi như sau: xmlDoc.loadXML("chuỗi xml hợp lệ"). Tôi sẽ chỉ cho bạn cách sử dụng phương pháp này sau.

Dòng 6: MsgBox xmlDoc.xml

Dòng này hiển thị nội dung của tệp XML đã tải xuống. Kết quả là chúng ta sẽ nhận được tệp XML gốc mà chúng ta đã tạo trước đó.

2.2. Khám phá mô hình đối tượng tài liệu XML

Tạo một dự án mới trong Visual Basic và đặt tên là Standard.exe. Dán đoạn mã trên vào phương thức tải cửa sổ chính của dự án của bạn. Đảm bảo bạn khai báo tham chiếu đến "Microsoft XML v3.0". Để thực hiện việc này, hãy nhấp vào Dự án->Tài liệu tham khảo, sau đó cuộn xuống danh sách xuất hiện và tìm liên kết mong muốn trong đó. Xin lưu ý rằng máy phân tích phiên bản 3.0 phải được cài đặt trên máy tính của bạn, nếu không nó sẽ không được liệt kê. Đặt điểm ngắt trên dòng mã cuối cùng (hộp thông báo xmlDoc.xml). Chạy ứng dụng ở chế độ gỡ lỗi. Khi quá trình thực thi đạt đến điểm dừng, hãy gọi cửa sổ "Locals" và xem mô hình đối tượng tài liệu. Bạn có thể học được nhiều điều bằng cách xem những gì được hiển thị trong cửa sổ này. Cửa sổ "Locals" sẽ trông giống như hình ảnh bên dưới. Dưới đây là một số thuộc tính thú vị của Mô hình đối tượng tài liệu.

Mô hình đối tượng tài liệu XML luôn chứa hai nút cấp cao nhất:

  • Item1 là gốc của nhánh thành phần tài liệu (bỏ qua nó)
  • Item2 thực sự là phần tử đầu tiên của tài liệu (hãy nhớ điều này)

nodeName hoặc baseName - có thể được sử dụng khi tìm kiếm tên của một phần tử hoặc thuộc tính.
nodeType - sử dụng để lấy loại nút hiện tại.
nodeValue - được sử dụng để tìm ra giá trị của dữ liệu nút.
childNodes là tập hợp các nút con. Chúng có thể là nút phần tử, nút văn bản và nút CDATA. Có thể có các loại nút khác mà bây giờ tôi sẽ không nói đến nhưng bạn có thể tìm hiểu tất cả về chúng trong XML SDK.
thuộc tính là tập hợp các nút thuộc tính cho phần tử hiện tại.
độ dài - được sử dụng để xác định số lượng nút trong cây trực tiếp thuộc về nút hiện tại.
xml - thuộc tính này có trong tất cả các nút và có thể được sử dụng để thể hiện vị trí hiện tại trong tài liệu. Chuỗi XML bắt đầu tại nút hiện tại và đi xuống cuối cây. Đây là một tính năng rất hữu ích. Hãy thử nghiệm với nó và xem điều gì sẽ xảy ra.

2.2.2. Các nút phần tử

Một nút phần tử có thể chứa các nút con của các phần tử, thuộc tính, văn bản hoặc CDATA. Từ hình bên dưới, bạn có thể thấy thông tin sau về nút "RẮN":

nodeType - Loại nút hiện tại = NODE_ELEMENT - tức là nút hiện tại là một phần tử.
nodeName hoặc baseName hoặc tagName - Tên của nút (phần tử) hiện tại = SOLID.
Phần tử cha của nó CONTENTS có 4 phần tử con.
Điều này có thể được nhìn thấy trong hình dưới đây, nhưng SOLID có một con là kiểu dữ liệu văn bản.
văn bản - "khối băng" là một phương thức phím tắt cho phép bạn lấy giá trị của nút hiện tại mà không cần di chuyển đến nút văn bản con.

2.2.3. Nút thuộc tính

Các nút thuộc tính chỉ có thể bao gồm các nút con văn bản hoặc CDATA. Hình dưới đây cho thấy thông tin nào có thể thu được về nút "qty":

nodeType - Loại nút hiện tại = NODE_ATTRIBUTE - nút hiện tại là một thuộc tính.
nodeName hoặc baseName - Tên của nút hiện tại (Thuộc tính) = qty

Từ hình dưới đây, rõ ràng qty có một con, có kiểu dữ liệu văn bản.
văn bản hoặc giá trị - "2" là phương thức phím tắt cho phép bạn lấy giá trị của nút hiện tại mà không cần di chuyển đến nút văn bản con.

2.2.4. Nút văn bản và CDATA

Các nút văn bản hoặc CDATA không có nút con. Các nút văn bản chứa dữ liệu văn bản đã được xử lý của nút cha của chúng. CDATA chứa dữ liệu văn bản thô của nút cha của nó. Các nút CDATA được tạo khi dữ liệu trong tệp XML được đóng khung theo cách đặc biệt. Nhãn CDATA yêu cầu trình phân tích cú pháp không phân tích dữ liệu và chấp nhận các ký tự bên trong nhãn dưới dạng dữ liệu. Phần CDATA đặc biệt hữu ích khi bạn cần chèn mã bên trong tệp XML. Hình dưới đây cho thấy thông tin nào có thể được lấy từ nút văn bản hiện tại:

nodeType - Loại nút hiện tại = NODE_TEXT - nút hiện tại chứa dữ liệu văn bản.
nodeName - Tên của nút hiện tại (văn bản) = #text - tất cả các nút văn bản được gọi là #text
dữ liệu hoặc văn bản hoặc giá trị - "2" là dữ liệu nút hiện tại.

2.2.5. Lỗi khi tải tài liệu

Phần phân tích lỗi của mô hình đối tượng tài liệu có thể hữu ích trong việc xác định các vấn đề phát sinh khi tải một tài liệu XML. Nếu tôi xóa thẻ đóng khỏi OTHER trong tệp ví dụ của chúng tôi và thử chạy lại chương trình, tôi sẽ nhận được kết quả sau. Thông tin hữu ích đầu tiên là nextSibling của chúng ta hiện chứa giá trị Nothing. Bây giờ, nếu nhìn vào childNodes, bạn có thể thấy trường độ dài hiện bằng 0. Cả hai dấu hiệu này đều cho biết tài liệu XML của chúng ta chưa được tải. Để tìm hiểu lý do, tôi mở nút parsError và lấy tất cả thông tin lỗi.

Như vậy tôi đã hướng dẫn bạn cách tải một tệp XML vào Mô hình Đối tượng Tài liệu, nhưng bạn sẽ làm gì với nó ở đó? Một trong những tính năng chính mà bạn có thể sử dụng là thực hiện nhiều truy vấn khác nhau trên một tài liệu XML. Để làm điều này, tất nhiên bạn có thể xem qua toàn bộ tài liệu cho đến khi tìm thấy thông tin mình đang tìm kiếm. Nhưng cách ưa thích nhất là sử dụng một trong hai phương thức của lớp DOMDocument. Hai phương thức được sử dụng để tìm các nút trong ví dụ trước của chúng tôi có thể giống như xmlDoc.SelectSingleNode(patternString) để lấy nút mà chúng tôi đang tìm kiếm hoặc xmlDoc.SelectNodes(patternString) để lấy danh sách các nút mà chúng tôi đang tìm kiếm. Tham số sampleString chính xác là yêu cầu. Nó có thể được hình thành theo một trong hai cách. Dưới dạng yêu cầu XSL hoặc dưới dạng yêu cầu XPath. Một cách mới hơn và được ưu tiên hơn để truy vấn một tài liệu XML là XPath. Định dạng sampleString phải được đặt trước, trước lệnh gọi đầu tiên tới một trong hai phương thức yêu cầu dữ liệu, nếu không, phương thức XSL để tạo yêu cầu sẽ được sử dụng theo mặc định. Để đặt kiểu hình thành của mẫuString, hãy sử dụng setProperty("SelectionLanguage", "format"). Để thay đổi các truy vấn trong ví dụ của chúng tôi để sử dụng cách XPath, tôi sẽ thêm lệnh sau: setProperty("SelectionLanguage","XPath"). Theo ý kiến ​​của tôi, XPath là công nghệ XML quan trọng nhất cần học. Tôi sẽ cung cấp cho bạn một số truy vấn XPath đơn giản. Một nơi tốt để bắt đầu tìm hiểu công nghệ này là Microsoft XML SDK. Một cách khác để giải thích điều này là viết một ứng dụng Visual Basic đơn giản cho phép bạn nhập truy vấn và đưa ra kết quả. Bạn có thể tìm thấy một số ứng dụng miễn phí có chức năng tương tự, nhưng XPath khá mới và có thể không được các ứng dụng đó hỗ trợ đầy đủ.

2.3.1. Sử dụng XPATH để truy vấn mô hình đối tượng tài liệu

Hãy thêm một số mã vào cuối ví dụ trước để trả về nội dung của sổ đặt hàng:

TUYỆT VỜI! Bây giờ chúng ta hãy thêm một truy vấn khác cho phép chúng ta xác định xem chiếc kính có nắp hay không. Thêm đoạn mã sau vào cuối đoạn mã trước:

Đặt objNode = xmlDoc.selectSingleNode("/CUP/LID") nếu objNode.text="yes" thì MsgBox "Chúng tôi có nắp" nếu không MsgBox "Không có nắp trên cốc này" end if

Chúng ta hãy đi qua từng dòng mã:

Dòng 1: Dim objNode Như IXMLDOMNode

Dòng này xác định biến objNode của loại nút tài liệu XML. Điều quan trọng là phải hiểu rằng nút tài liệu XML cũng là một đối tượng. Nó không quan trọng. Nó bao gồm chính nó, cũng như các thuộc tính và con của nó (childNodes). Sử dụng phương pháp này, bạn có thể cắt bỏ những cành cây không cần thiết, chỉ chọn những cành bạn cần.

Dòng 2: Dim objListOfNodes Như IXMLDOMNodeList

Dòng này xác định biến objListOfNodes, biến này có loại danh sách các nút tài liệu XML (nhóm nút).

Dòng 3: xmlDoc.setProperty "SelectionLanguage", "XPath"

Dòng này đặt cách mẫuString được hình thành dưới dạng XPath.

Dòng 4: MsgBox "Cốc của bạn chứa các vật phẩm sau:"

Dòng 5: Đặt objListOfNodes = xmlDoc.selectNodes("//CONTENTS/*[@qty>0]")

Dòng này thực hiện một truy vấn XPath sẽ trả về một nhóm nút và lưu trữ chúng trong biến objListOfNodes. Yêu cầu được chia thành các phần sau:

  • //NỘI DUNG - lấy tất cả các phần tử NỘI DUNG trong tài liệu XML. Lưu ý: // là cách viết tắt cho toàn bộ nội dung của tài liệu XML.
  • /* - từ danh sách các phần tử NỘI DUNG, lấy tất cả (* - dùng để biểu thị tất cả) phần tử con. Điều này làm giảm kết quả xuống còn bốn nút phần tử ( ). Bốn nút này nằm ngay dưới nút NỘI DUNG.
  • [@qty>0] - kiểm tra từng phần tử con để đảm bảo rằng thuộc tính qty của nó (@ - thuộc tính trung bình) lớn hơn 0. Nếu điều kiện này không được đáp ứng, nút sẽ bị loại bỏ. Mọi thứ bên trong một yêu cầu XPath đều có thể nhận giá trị Đúng hoặc Sai. Nếu kết quả là True thì nút đó sẽ được lưu. Nếu kết quả là Sai thì nút đó sẽ bị loại bỏ. Sau này, kết quả của chúng tôi giảm xuống còn ba nút (

Dòng 6-8: Đối với mỗi objNode Trong objListOfNodes / MsgBox objNode.Text / Next

Các hàng này hiển thị giá trị của từng nút phần tử phù hợp với truy vấn. ("đá viên", "rơm", "nước").

Dòng 9: Đặt objNode = xmlDoc.selectSingleNode("/CUP/LID")

Dòng này trả về tất cả các phần tử LID thuộc về phần tử CUP, phần tử này lại bắt nguồn từ gốc của cây (khi truy vấn bắt đầu bằng /, điều này có nghĩa là bạn cần bắt đầu từ gốc). Điều này rất giống với đường dẫn đến một tập tin hoặc thư mục. Trong ví dụ của chúng tôi, truy vấn này sẽ trả về phần tử LID chứa giá trị "có". Điều quan trọng ở đây là tôi đã yêu cầu bắt đầu từ phần tử gốc của tài liệu XML. Các truy vấn không phải lúc nào cũng bắt đầu ở phần tử gốc; chúng thường bắt đầu ở nút hiện tại. Trong ví dụ của chúng tôi, điều này không thành vấn đề vì nút hiện tại (xmlDoc) là phần tử gốc của tài liệu XML (nhưng điều này không đúng trong mọi trường hợp).

Dòng 10-15: if objNode.text="yes" then / MsgBox "Chúng tôi có nắp" /
else / MsgBox "Cốc này không có nắp" /end if

Dòng này hiển thị thông báo "Chúng tôi có nắp" vì thuộc tính văn bản LID của phần tử là "có".

3. Chuyển đổi ADO sang XML

Bây giờ bạn đã hiểu những kiến ​​thức cơ bản về XML, hãy tạo một điều khiển ActiveX để chuyển đổi tập dữ liệu ADO sang định dạng XML. Mục đích là lấy tên sách từ bảng Tiêu đề của cơ sở dữ liệu Quán rượu và trả về chúng ở định dạng XML. Tôi sẽ sử dụng kết quả trong bài viết tiếp theo của tôi. Có thể nói ADO có những phương pháp riêng để lưu kết quả dưới định dạng XML phải không? Có, nhưng nếu tôi tin tưởng ADO thực hiện việc này, tôi sẽ nhận được một tệp XML có định dạng khủng khiếp đến mức không thể làm việc được. ADO sẽ tạo tệp XML bằng cách sử dụng không gian tên và hiện tại tôi không cần điều đó. Thứ hai, ADO sẽ tạo một tệp XML, tệp này sẽ được biểu diễn dưới dạng thuộc tính. Nói cách khác, mọi bản ghi sẽ trở thành một phần tử và mọi trường sẽ trở thành một thuộc tính:

Nhưng tôi muốn nhận một tệp XML ở dạng phần tử, trong đó mỗi mục nhập sẽ được chứa trong một thẻ và mỗi trường sẽ là một phần tử bên trong thẻ . Cú pháp chuỗi XML của tôi sẽ là:

dữ liệu từ bảng dữ liệu từ bảng dữ liệu từ bảng dữ liệu từ bảng dữ liệu từ bảng dữ liệu từ bảng dữ liệu từ bảng

Nhân tiện, điều tôi vừa làm là tạo một lược đồ cho chuỗi XML của mình. Bây giờ, nếu tôi cần kiểm tra cấu trúc của một tài liệu XML dựa trên một lược đồ, tất cả những gì tôi phải làm là chuyển đổi lược đồ đó sang định dạng đúng. Tức là theo cú pháp DTD hoặc XDR. Lưu ý rằng tôi đã thêm một số thuộc tính cho từng thành phần . Một lý do cho điều này là thông tin này có thể được khách hàng sử dụng. Prettyname có thể được sử dụng làm nhãn dữ liệu. Thuộc tính kiểu dữ liệu có thể được sử dụng để xác thực dữ liệu phía máy khách. Nhưng công bằng mà nói, lý do thực sự khiến các thuộc tính này tồn tại là vì chúng có mục đích đặc biệt trong mẫu tệp XSL mà tôi thường sử dụng để xây dựng mệnh đề Where của các truy vấn SQL. Có lẽ tôi sẽ sớm xuất bản một bài viết chứng minh cách tiếp cận này. Mẫu này thực sự rất hữu ích. Khi cấu trúc XML được áp dụng cho dữ liệu từ bảng Tiêu đề, kết quả sẽ như sau:

Hướng dẫn cơ sở dữ liệu dành cho người điều hành bận rộn BU1032 Hướng dẫn cơ sở dữ liệu dành cho người điều hành bận rộn việc kinh doanh 19.99 4095 Tổng quan về các hệ thống cơ sở dữ liệu có sẵn, nhấn mạnh vào các ứng dụng kinh doanh phổ biến. Minh họa. 6/12/1991 Nấu ăn bằng máy tính: Bảng cân đối kế toán lén lút BU1111 Nấu ăn bằng máy tính: Bảng cân đối kế toán lén lút việc kinh doanh 11.95 3876 Những gợi ý hữu ích về cách sử dụng tài nguyên điện tử của bạn một cách hiệu quả nhất. 6/9/1991

Bây giờ tôi có việc phải làm rồi!

Liệt kê 1 - CUP.XML

thủy tinh 6 16 khối băng Rơm rạ Nước Đúng

Dim xmlDoc As MSXML2.DOMDocument30 Đặt xmlDoc = New DOMDocument30 xmlDoc.async = False xmlDoc.validateOnParse = False xmlDoc.Load ("c:\inetpub\wwwroot\xml\cup.xml") MsgBox xmlDoc.xml Dim objNode As IXMLDOMNode Dim objListOfNodes Như IXMLDOMNodeList xmlDoc.setProperty "SelectionLanguage", "XPath" MsgBox "Cốc của bạn chứa các mục sau" Đặt objListOfNodes = xmlDoc.selectNodes("//CONTENTS/*[@qty>0]") cho mỗi objNode Trong objListOfNodes MsgBox objNode. Văn bản Tiếp theo Đặt objNode = xmlDoc.selectSingleNode("/CUP/LID") Nếu objNode.Text = "yes" Then MsgBox "Chúng tôi có nắp" Khác MsgBox "Không có nắp trên cốc này" End If

Liệt kê 3 - Điều khiển ActiveX: ADO trong XML (WebClass.dll)(xmlControl.cls)

Tùy chọn Rõ ràng "Khai báo các biến cơ sở dữ liệu Private m_dbConnection As New ADODB.Connection Private m_dbCommand As ADODB.Command Private m_adoRs As ADODB.Recordset Private m_adoErrors As ADODB.Errors Private m_adoErr As Error Public nCommandTimeOut As Variant Public nConnectionTimeOut As Variant Public strConnect As Variant Public strAppName As Chuỗi công khai strLogPath Như chuỗi công khai strDatabase Như chuỗi công khai strUser Như chuỗi công khai strPassword Như chuỗi công khai strServer Như chuỗi công khai strVersion Như chuỗi công khai lMSADO Như Boolean "Biến toàn cầu riêng tư gnErrNum Là biến thể Riêng tư gstrErrDesc Như biến thể Riêng tư gstrErrSrc Là biến thể Riêng tư gstrDB Là chuỗi riêng tư gstrADOError As String Private Const adLeonNoRecordset As Integer = 129 Private gtableName(6) As String Private gcolumnName(6) As String Private gprettyName(6) As String Private gdatatype(6) As String Private gfilter(6) As String Private Function OpenDatabase() If Len(strConnect) = 0 Then "đặt giá trị mặc định Nếu Len(strDatabase) = 0 Then strDatabase = "pubs" End If nConnectionTimeOut = 0 Then nConnectionTimeOut = 600 End If If nCommandTimeOut = 0 Then nCommandTimeOut = 600 End If If Len (strAppName) = 0 Then strAppName = "xmlControl" End If If Len(strUser) = 0 Then strUser = "sa" End Nếu Len(strPassword) = 0 Then strPassword = "" End If strConnect = "Provider=SQLOLEDB. 1 ; " & _ "Tên ứng dụng=" & strAppName & _ "; Nguồn dữ liệu=" & strServer & "; Danh mục ban đầu="&strDatabase&"; " & _ " ID người dùng=" & strUser & "; Mật khẩu=" & strPassword & ";" Kết thúc Nếu "kết nối với SQL Server và mở cơ sở dữ liệu Khi có lỗi GoTo SQLErr "Bật trình xử lý lỗi Với m_dbConnection .ConnectionTimeout = nConnectionTimeOut .CommandTimeout = nCommandTimeOut .Open strConnect "mở cơ sở dữ liệu bằng chuỗi kết nối End With On Error GoTo 0 "tắt trình xử lý lỗi OpenDatabase = True" cơ sở dữ liệu đã mở thành công Thoát Chức năng SQLErr: Call logerror("OPEN") OpenDatabase = False End Function Chức năng riêng BuildSQLwhere(tmpWhere) As String "Đây là dành cho tương lai Kết thúc Hàm Public Function GetTitlesXML (XmlWhere As Variant tùy chọn) As String DimwhereClause As String Dim strSQL As String Call OpenDatabase "mở cơ sở dữ liệu pubs If IsMissing(xmlWhere) Then"khi truy vấn không thành côngwhereClause = "" ElsewhereClause = BuildSQLwhere(xmlWhere)" chuyển đổi truy vấn thành một sql chính xác Kết thúc Nếu "khởi tạo một biểu thức sql sẽ truy vấn tiêu đề sách strSQL = "select title_id,title,type,price,ytd_sale,notes,pubdate từ tựa đề" & WhereClause Gọi NewRecordSet "tạo một tập dữ liệu" đặt vị trí con trỏ m_adoRs. CursorLocation = adUseClient "mở tập bản ghi m_adoRs.Open strSQL, m_dbConnection, adOpenForwardOnly, adLockReadOnly, adCmdText "ngắt kết nối khỏi tập dữ liệu Set m_adoRs.ActiveConnection = Nothing On Error GoTo 0 "tắt trình xử lý lỗi "đóng cơ sở dữ liệu và giải phóng kết nối Gọi CloseDatabase Nếu m_adoRs. EOF Then GetTitlesXML = "" "truy vấn không trả về bất kỳ giá trị nào Khác Nếu lMSADO Then GetTitlesXML = msado(m_adoRs) "chuyển đổi tập bản ghi ado thành xml tùy chỉnh End If End If "đóng tập dữ liệu Gọi CloseRecordset Thoát Hàm SQLErr: Gọi logerror(strSQL) Hàm kết thúc Hàm riêng ADOtoXML(tmprs As ADODB.Recordset, tmpMP As Boolean) As String Dim adoFields As ADODB.Fields "khai báo một tập hợp để lưu trữ các trường Dim adoField As ADODB.Field" được dùng để lấy mỗi trường từ bộ sưu tập Dim xmlDoc As msxml2.DOMDocument30 Dim tmpLine As String "lưu trữ biểu diễn xml của mỗi cuốn sách Dim tmpXML As String" được sử dụng để nối các chuỗi xml Dim i As Integer Nếu tmprs.EOF Then "truy vấn không trả về bất kỳ bản ghi nào ADOtoXML = "" Thoát chức năng Khác Đặt adoFields = tmprs.Fields "tạo tập hợp các trường Kết thúc Nếu tmpXML = " " "tất cả sách sẽ được đính kèm trong một thẻ Do Until tmprs.EOF "lặp qua từng hàng trong tập dữ liệu i = 0 " I là chỉ mục của trường ado, bắt đầu từ 0 - trường đầu tiên sẽ là field(0) tmpLine = " " & tmprs("title") & vbCrLf cho mỗi adoField Trong adoFields "lặp qua tất cả các trường" xây dựng thẻ xml và các thuộc tính của nó cho trường hiện tại tmpLine = tmpLine & " " & adoField.Value tmpLine = tmpLine & "" & vbCrLf i = i + 1 "chuyển sang trường tiếp theo tmpXML = tmpXML & tmpLine & "" & vbCrLf "thẻ đóng sau trường cuối cùng tmprs.MoveNext "tiêu đề tiếp theo Vòng lặp Đặt adoField = Nothing "hủy đối tượng trường Set adoFields = Nothing "hủy đối tượng thu thập trường tmpXML= tmpXML & " Thẻ đóng "&vbCrLf" Đặt xmlDoc = Mới msxml2.DOMDocument30 "tạo xmlDOM xmlDoc.async = Sai" đợi tài liệu tải xmlDoc.validateOnParse = False "không kiểm tra lược đồ xmlDoc.loadXML(tmpXML) "tải chuỗi vào mô hình đối tượng tài liệu khi có lỗi Tiếp tục Tiếp theo "nếu tệp không tồn tại thì chúng tôi xử lý lỗi này Kill("c:\temp\custom.xml") "xóa tệp nếu nó tồn tại On Error GoTo 0 "yêu cầu trình xử lý lỗi ngắt khi có lỗi đã phát hiện xmlDoc.save ("c:\temp\custom. xml") "lưu xml vào tệp ADOtoXML=xmlDoc.xml "trả về chuỗi xml Set xmlDoc=Nothing "hủy mô hình đối tượng tài liệu Chức năng cuối Hàm riêng msado(tmprs As ADODB.Recordset ) As String Dim xmlDoc As msxml2.DOMDocument30 On Error Resume Next "nếu tệp không tồn tại, chúng tôi gặp lỗi Kill ("c:\temp\msado.xml") "chúng tôi xóa tệp nếu nó tồn tại On Error GoTo 0 "chúng tôi yêu cầu trình xử lý lỗi hủy bỏ khi phát hiện thấy lỗi tmprs.save "c:\temp\msado .xml", adPersistXML "lưu xml vào một tệp Set xmlDoc = New msxml2.DOMDocument30 "tạo mô hình đối tượng tài liệu xml xmlDoc .async = False "đợi tài liệu xml tải xmlDoc.validateOnParse = False "không kiểm tra lược đồ xmlDoc.Load ("C: \temp\msado.xml") "tải tệp vào mô hình đối tượng tài liệu msado = xmlDoc .xml "trả về chuỗi xml Set xmlDoc = Nothing "hủy mô hình đối tượng tài liệu End Function Private SubCloseRecordset() "đóng tập dữ liệu m_adoRs.Close Set m_adoRs =Nothing End Sub Private Sub NewRecordSet() Set m_adoRs= Nothing Set m_adoRs=New ADODB.Recordset End Sub Private Sub CloseDatabase() m_dbConnection.Close Set m_dbConnection =Nothing End Sub Private Sub logerror(errSQL As String) Dim hFile As Integer Dim expFile As String On Error GoTo 0 gnErrNum = Err.Number gstrErrDesc =Err.Description gstrErrSrc = Err.Source Đặt m_adoErrors = m_dbConnection.Errors cho mỗi m_adoErr Trong m_adoErrors gstrADOError = m_adoErr.Description & "," & CStr(m_adoErr.NativeError) _ & "," & CStr(m_adoErr.Number) & "," & m_adoErr. Nguồn _ & "," & CStr(m_adoErr.SQLState) Tiếp theo hFile =FreeFile If Len(strLogPath) = 0 Then strLogPath = "C:\temp\" End If expFile = strLogPath & strAppName & ".err" Mở expFile để nối thêm Như #hFile Print #hFile,"*************************************** ***** **" In #hFile, Now() In #hFile, "************************************ *** ****" Print #hFile,"Chương trình con: " & tmpPro Print #hFile, "Số lỗi:" & gnErrNum Print#hFile, "Mô tả lỗi: " & gstrErrDesc Print #hFile, "Nguồn lỗi:" & gstrErrSrc In # hFile, "Ado error String: " & gstrADOError Print #hFile, "Bad SQL: " & errSQL Close #hFile End Sub Private Sub Class_Initialize() strVersion = "xmlControl Phiên bản 1. 1" "title_id,title,type,price,ytd_sale,notes,pubdate gtableName(0) = "titles" gcolumnName(0) = "title_id" gprettyName(0) = "Số nhận dạng tiêu đề" gdatatype(0) = "number" gfilter(0) = "" gtableName(1) = "titles" gcolumnName(1) = "title" gprettyName(1) = "Tiêu đề sách" gdatatype(1) = "văn bản" gfilter(1) = "" gtableName (2) = "titles" gcolumnName(2) = "type" gprettyName(2) = "Loại sách" gdatatype(2) = "text" gfilter(2) = "" gtableName(3) = "titles" gcolumnName( 3) = "giá" gprettyName(3) = "Giá sách" gdatatype(3) = "number" gfilter(3) = "" gtableName(4) = "titles" gcolumnName(4) = "ytd_sale" gprettyName( 4) = "Doanh số tính đến thời điểm hiện tại" gdatatype(4) = "number" gfilter(4) = "" gtableName(5) = "titles" gcolumnName(5) = "notes" gprettyName(5) = "Ghi chú về cuốn sách " gdatatype(5) = "memo" gfilter(5) = "" gtableName(6) = "titles" gcolumnName(6) = "pubdate" gprettyName(6) = "Ngày xuất bản" gdatatype(6) = "date" gfilter (6) = "" Kết thúc phụ

Liệt kê 4 - Ứng dụng thử nghiệm VB để thử nghiệm WebClass

Private Sub Command1_Click() Dim objWC As xmlControl Dim xml As String Set objWC = New xmlControl objWC.strDatabase = "pubs" objWC.strServer = "ltweb" objWC.strUser = "sa" objWC.strPassword = "" objWC.lMSADO = Option2 .Value objWC.strAppName = "Article1" Text1.Text = objWC.getTitlesXML End Sub

Liệt kê 5 - ASP để thử nghiệm WebClass

Định dạng XML được thiết kế để lưu trữ dữ liệu có thể hữu ích trong hoạt động của một số chương trình, trang web nhất định và hỗ trợ cho một số ngôn ngữ đánh dấu nhất định. Không khó để tạo và mở một tệp có định dạng này. Điều này có thể được thực hiện ngay cả khi bạn không cài đặt bất kỳ phần mềm chuyên dụng nào trên máy tính của mình.

Bản thân XML là một ngôn ngữ đánh dấu, hơi giống với HTML, được sử dụng trên các trang web. Nhưng nếu cái sau chỉ được sử dụng để hiển thị thông tin và đánh dấu chính xác của nó, thì XML cho phép nó được cấu trúc theo một cách nhất định, điều này làm cho ngôn ngữ này hơi giống với ngôn ngữ tương tự của cơ sở dữ liệu không yêu cầu DBMS.

Bạn có thể tạo tệp XML bằng các chương trình chuyên dụng hoặc trình soạn thảo văn bản được tích hợp trong Windows. Việc viết mã dễ dàng và mức độ chức năng của nó phụ thuộc vào loại phần mềm được sử dụng.

Phương pháp 1: Visual Studio

Thay vì trình soạn thảo mã Microsoft này, bạn có thể sử dụng bất kỳ tính năng tương tự nào của nó từ các nhà phát triển khác. Trên thực tế, Visual Studio là phiên bản nâng cao hơn của Visual Studio thông thường. "Sổ tay". Mã hiện có tính năng đánh dấu đặc biệt, các lỗi được đánh dấu hoặc sửa tự động và các mẫu đặc biệt đã được tải vào chương trình giúp tạo các tệp XML lớn dễ dàng hơn.

Để bắt đầu, bạn cần tạo một tệp . Bấm vào một mục "Tài liệu"ở bảng trên cùng và từ menu thả xuống, chọn "Tạo nên…". Một danh sách sẽ mở ra cho biết mục "Tài liệu".

  • Bạn sẽ được chuyển hướng đến một cửa sổ có lựa chọn phần mở rộng tập tin, hãy chọn mục phù hợp "Tệp XML".
  • Tệp mới tạo sẽ có dòng đầu tiên với mã hóa và phiên bản. Theo mặc định, phiên bản đầu tiên và mã hóa được chỉ định UTF-8, mà bạn có thể thay đổi bất cứ lúc nào. Tiếp theo, để tạo một tệp XML chính thức, bạn cần ghi lại mọi thứ có trong hướng dẫn trước đó.

    Khi hoàn tất, chọn lại ở bảng trên cùng "Tài liệu" và có một mục từ menu thả xuống "Lưu lại mọi thứ".

    Cách 2: Microsoft Excel

    Bạn có thể tạo tệp XML mà không cần viết mã, chẳng hạn như sử dụng các phiên bản hiện đại của Microsoft Excel, phiên bản này cho phép bạn lưu bảng bằng tiện ích mở rộng này. Tuy nhiên, bạn cần hiểu rằng trong trường hợp này sẽ không thể tạo ra thứ gì đó có nhiều chức năng hơn một chiếc bàn thông thường.

    Phương pháp này phù hợp hơn với những người không muốn hoặc không biết cách làm việc với code. Tuy nhiên, trong trường hợp này, người dùng có thể gặp phải một số vấn đề nhất định khi viết lại tệp ở định dạng XML. Thật không may, thao tác chuyển đổi bảng thông thường sang XML chỉ có thể thực hiện được trên các phiên bản MS Excel mới nhất. Để thực hiện việc này, hãy sử dụng hướng dẫn từng bước sau:


    Cách 3: Ghi chú

    Ngay cả một cái thông thường cũng khá phù hợp để làm việc với XML "Sổ tay", tuy nhiên, sẽ gặp khó khăn đối với người dùng không quen với cú pháp của ngôn ngữ vì cần phải viết nhiều lệnh và thẻ khác nhau trong đó. Quá trình này sẽ đơn giản hơn và hiệu quả hơn nhiều trong các chương trình chỉnh sửa mã chuyên dụng, chẳng hạn như trong Microsoft Visual Studio. Chúng có các chú giải công cụ và đánh dấu thẻ đặc biệt, giúp đơn giản hóa đáng kể công việc của người mới làm quen với cú pháp của ngôn ngữ này.

    Phương pháp này không yêu cầu tải xuống bất cứ thứ gì vì nó đã được tích hợp sẵn trong hệ điều hành. "Sổ tay". Hãy thử tạo một bảng XML đơn giản trong đó bằng cách sử dụng các hướng dẫn sau:


    Kết quả hoàn thành của bạn sẽ trông giống như thế này:




    25
    ĐÚNG VẬY


    Trình biên dịch XML phải xử lý mã này dưới dạng bảng có một cột chứa dữ liệu về một Ivan Ivanov nào đó.

    TRONG "Sổ tay" Hoàn toàn có thể tạo các bảng đơn giản như thế này, nhưng khi tạo các tập dữ liệu lớn hơn, khó khăn có thể nảy sinh, vì trong các bảng thông thường "Sổ tay" Không có chức năng sửa lỗi trong mã hoặc làm nổi bật chúng.

    Như bạn có thể thấy, không có gì phức tạp trong việc tạo một tệp XML. Nếu muốn, nó có thể được tạo bởi bất kỳ người dùng nào ít nhiều biết cách làm việc trên máy tính. Tuy nhiên, để tạo một tệp XML chính thức, bạn nên nghiên cứu ngôn ngữ đánh dấu này, ít nhất là ở mức độ nguyên thủy.

    Trong bài viết trước về XML, chúng ta đã xem xét một phương pháp xác thực tài liệu XML lỗi thời như XML DTD. Phương pháp này vẫn được sử dụng để xác thực dữ liệu XML, nhưng nó ngày càng được thay thế bởi một công nghệ mới gọi là Lược đồ XML. Nhiều thiếu sót trong XML DTD đã được sửa chữa trong các lược đồ XML, vì vậy hiện tại tất cả các nhà phát triển hàng đầu chỉ sử dụng các lược đồ XML để xác thực tài liệu.

    Để đánh giá cao những ưu điểm của Lược đồ XML so với DTD, chúng ta hãy xem xét kỹ hơn những nhược điểm chính của DTD đã được sửa chữa thành công trong Lược đồ XML. Tôi đã đề cập đến chúng trong bài viết “”, nhưng để hiểu rõ hơn, hãy lặp lại.

    Nhược điểm của XML DTD so với XML Schema

    1. Cú pháp ngôn ngữ khác với XML. Tức là DTD không phải là XML. Về vấn đề này, nhiều vấn đề khác nhau có thể nảy sinh khi mã hóa và xác minh tài liệu XML.
    2. Không kiểm tra kiểu dữ liệu. Chỉ có một kiểu dữ liệu trong chuỗi XML DTD. Về vấn đề này, ví dụ: nếu có văn bản trong trường số, tài liệu sẽ vẫn vượt qua quá trình xác minh vì XML DTD không thể kiểm tra kiểu dữ liệu.
    3. Bạn không thể gán nhiều mô tả DTD cho một tài liệu XML. Nghĩa là, một tài liệu có thể được xác minh chỉ bằng một mô tả DTD. Nếu có một vài trong số chúng, bạn sẽ phải làm lại các mô tả và kết hợp mọi thứ vào một tệp, điều này rất bất tiện.

    Đây là những thiếu sót chính của XML DTD, đã được sửa chữa thành công trong tiêu chuẩn ngành để mô tả các tài liệu XML, Lược đồ XML.

    Lược đồ XML là một tiêu chuẩn công nghiệp để mô tả các tài liệu XML

    Tóm lại, Lược đồ XML thực hiện những việc sau:

    1. Mô tả tên của các phần tử và thuộc tính (từ điển).
    2. Mô tả mối quan hệ giữa các phần tử và thuộc tính cũng như cấu trúc của chúng (mô hình nội dung).
    3. Mô tả các kiểu dữ liệu

    Tôi cũng muốn lưu ý rằng hiện tại hầu hết mọi thứ đều có thể được mô tả bằng sơ đồ. Nghĩa là, lược đồ là một cách phổ biến để mô tả ngữ pháp của dữ liệu, nó có thể được sử dụng không chỉ để xác minh tài liệu XML mà còn để mô tả cơ sở dữ liệu, v.v. Vì vậy, phạm vi áp dụng của các chương trình hiện nay rất rộng.

    Lược đồ XML mẫu để xác thực một tài liệu XML

    Như thực tế cho thấy, tài liệu sẽ được tiếp thu tốt hơn nhiều nếu bạn bắt đầu học ngay với các ví dụ. Tôi sẽ nói ngay rằng chúng ta sẽ không đi sâu vào tất cả các chi tiết vì tài liệu rất phức tạp, đặc biệt nếu bạn nghiên cứu nó dưới dạng văn bản.

    Ví dụ về lược đồ XML đơn giản

    Bằng cách sử dụng lược đồ này, bạn có thể xác thực tài liệu XML sau.

    <книга xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "book.xsd"> <название>Khái niệm cơ bản về XML <цена>300

    Vì vậy, hãy quay lại lược đồ XML của chúng ta. Như bạn đã nhận thấy, XML, như chúng ta đã biết, được sử dụng để tạo các lược đồ XML. Sự khác biệt duy nhất ở đây là Lược đồ XML có các phần tử đã được xác định sẵn, không giống như XML thông thường. Về vấn đề này, không gian tên được sử dụng. Trong trường hợp này, không gian tên được yêu cầu sẽ là “http://www.w3.org/2001/XMLSchema”, sẽ được chỉ định bằng cách sử dụng tiền tố “xs”.

    Tôi muốn lưu ý ngay rằng bạn có thể sử dụng cả tiền tố vùng tên và đặt vùng tên cho phần tử gốc. Không có sự khác biệt như vậy. Mọi người đều tự quyết định phải làm gì trong một tình huống nhất định. Hãy để tôi nói rằng các tiền tố “xs” hoặc “xsd” thường được sử dụng.

    Chà, bây giờ chúng ta hãy tìm cách giải mã sơ đồ trên. Như đã đề cập ở trên, Lược đồ XML là sự mô tả về từ vựng và kiểu dữ liệu. Dựa trên điều này, chúng tôi sẽ giải mã từng yếu tố.

    • — khai báo phần tử “book” với loại “Book”.
    • — khai báo một kiểu phức tạp với tên “Book” (xs: complexType - có thể chứa các phần tử lồng nhau).
    • - khai báo về việc lồng nhau. Tức là kiểu sẽ chứa các phần tử lồng nhau.
    • — khai báo một phần tử có tên “title” (loại tiêu chuẩn “chuỗi” - xs:string).
    • — khai báo một phần tử có tên “price” (loại tiêu chuẩn “number” - xs:decimal).

    Như bạn có thể thấy, không có gì quá phức tạp ở đây. Nếu bạn nghĩ về nó, mọi thứ đều rất đơn giản.

    Các phần tử lược đồ XML cơ bản

    Nói ngắn gọn, lược đồ XML có thể được mô tả như sau.

    Đề án của bạn

    Như bạn có thể thấy từ ví dụ này, mỗi lược đồ XML bao gồm một phần tử gốc “lược đồ” và một không gian tên bắt buộc “http://www.w3.org/2001/XMLSchema”. Tiếp theo là mô tả về mạch điện và bản thân mạch điện đó. Đồng thời, rất thường xuyên trong các lược đồ chất lượng rất cao, mô tả lớn hơn nhiều so với chính Lược đồ XML.

    Mô tả các phần tử trong Lược đồ XML

    Ở đầu bài viết, chúng ta đã xem xét một ví dụ về lược đồ XML đơn giản. Trong đó chúng tôi mô tả riêng các phần tử và loại. Đồng thời, tôi muốn lưu ý ngay rằng trình tự không đóng vai trò gì ở đây. Đề án sẽ hoạt động trong mọi trường hợp.

    Bây giờ chúng ta hãy xem cách viết Lược đồ XML thứ hai, dựa trên việc mô tả kiểu ngay bên trong phần tử. Phương pháp này phù hợp nếu bạn không định sử dụng cùng một mô tả cho các phần tử khác nhau. Để rõ ràng, chúng ta hãy xem một ví dụ.

    Như có thể thấy từ ví dụ, một phần tử được khai báo bằng cách sử dụng một “phần tử” xây dựng đặc biệt bằng cách sử dụng tiền tố thích hợp. Trong trường hợp này, chúng ta định nghĩa một phần tử có tên là “root” mà không chỉ định loại vì nó sẽ được mô tả bên trong phần tử. Tức là có hai cách để mô tả các phần tử.

    1 chiều

    Loại mô tả

    Phương pháp 2

    Mô tả loại phần tử

    Bạn có thể sử dụng cả phương pháp đầu tiên và phương pháp thứ hai. Tất cả đều hoạt động theo cùng một cách. Câu hỏi duy nhất là sự thuận tiện trong trường hợp cụ thể này.

    Hơn nữa, sau khi khai báo phần tử, chúng tôi chỉ ra rằng nó thuộc loại phức tạp ( ) và liệt kê ( ) các phần tử lồng nhau. Trong trường hợp này, đây là các phần tử tên và tuổi có kiểu “xs:string” và “xs:integer”. Tiền tố xs có nghĩa là loại cơ sở đã được xác định trong tiêu chuẩn Lược đồ XML.

    Như bạn có thể thấy, mọi thứ cho đến nay khá đơn giản. Một lần nữa, chúng tôi sẽ không đi sâu vào tất cả các chi tiết, vì bài viết này nhằm mục đích giúp bạn làm quen với Lược đồ XML chứ không phải để nghiên cứu nó một cách chi tiết.

    Lược đồ XML và tài liệu khớp với nhau như thế nào

    Điểm đặc biệt của Lược đồ XML là nó mô tả không phải bản thân tài liệu mà là không gian tên. Về vấn đề này, hầu hết thường không có đề cập đến nó trong tài liệu. Bản thân trình xử lý ánh xạ lược đồ bạn cần mà không cần sử dụng bất kỳ hướng dẫn nào trong tài liệu XML.

    Trong trường hợp trình xử lý không biết lược đồ ở đâu, chúng ta có thể chỉ ra nơi cần tìm. Điều này được thực hiện bằng cách sử dụng thuộc tính đặc biệt “schemaLocation”. Vì thuộc tính này thuộc về một không gian tên khác nên không gian tên cũng phải được chỉ định trước khi sử dụng thuộc tính. Để rõ ràng, chúng ta hãy xem một ví dụ.

    Lược đồ XML

    tài liệu XML

    Bây giờ chúng ta hãy xem xét chi tiết từng dòng.

    • targetNamespace=”http://www.site.com” – cho biết Lược đồ XML này dành cho không gian tên nào.
    • xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” – chúng tôi kết nối không gian tên trong đó thuộc tính “schemaLocation” được mô tả.
    • xsi:schemaLocation=”http://www.site.com/product.xsd” – chúng tôi chỉ ra nơi có thể tìm thấy lược đồ trong trường hợp trình phân tích cú pháp không biết nó ở đâu. Nếu tài liệu XML không thuộc về bất kỳ không gian tên nào và do đó không có tham chiếu đến nó trong lược đồ thì thuộc tính “schemaLocation” sẽ được thay thế bằng “noNamespaceSchemaLocation” (tham chiếu đến lược đồ mà không xác định các không gian tên).

    Đó là tất cả. Chúc may mắn và thành công trong việc học XML!