Chuyển đổi sang định dạng XML. Tạo Tệp Dữ liệu XML và Tệp Lược đồ XML từ Dữ liệu Trang tính

Rất thường xuyên, nhiều người dùng hệ thống máy tính hiện đại và các loại sản phẩm phần mềm khác nhau gặp phải các tệp có phần mở rộng .xml. Nhiều người chỉ đơn giản là không biết đây là loại tài liệu gì hoặc làm thế nào để mở nó. Bây giờ chúng ta sẽ xem xét nó, đồng thời tìm hiểu xem nó là gì và cần thiết để làm gì.

Tệp XML là gì

Có lẽ chúng ta hãy bắt đầu với thực tế là, từ quan điểm của các chương trình và công nghệ máy tính hiện đại được sử dụng để tạo ra các tài liệu loại này, đó là một tệp văn bản trong đó các lệnh của ngôn ngữ đánh dấu có thể mở rộng phổ quát được viết, khá là đơn giản. gợi nhớ đến công cụ đánh dấu HTML nổi tiếng.

Thông thường, một tệp XML chứa thông tin chung về một đối tượng, được thể hiện mang tính mô tả (sẽ nói thêm về điều này sau). Đối với dữ liệu được lưu trữ trong các vùng chứa như vậy, đó có thể là cơ sở dữ liệu thường được sử dụng cho các danh mục video và âm thanh trên Internet, các tùy chọn đã lưu của người dùng đối với các chương trình và ứng dụng, cũng như toàn bộ trang web.

Ví dụ: bạn có thể lấy một album âm thanh của một số nghệ sĩ. Tệp XML bao gồm thông tin về năm phát hành, thể loại, số lượng và tên các bản nhạc, mức độ phổ biến, v.v. Tuy nhiên, khi truy cập các tài nguyên trên World Wide Web, người lướt sóng không cần phải suy nghĩ về việc mở một tệp thông tin như vậy một cách vật lý, vì ngay cả khi phát một bài hát trực tuyến trong trình phát. Tất cả dữ liệu sẽ được hiển thị tương tự như dữ liệu có trong tệp MP3 tiêu chuẩn dưới dạng thẻ ID3. Thông tin được tải vào bản nhạc đang được phát.

Loại tệp XML

Nếu bạn nhìn vào tệp, bạn sẽ nhận thấy ngay rằng các thuộc tính của bất kỳ đối tượng nào trong đó đều được mô tả bằng cách sử dụng các thẻ và thuộc tính được đặt thủ công.

Chúng tôi không nói về các lệnh cơ bản của ngôn ngữ vì người dùng bình thường không cần thông tin đó. Điều duy nhất có thể lưu ý là không có số lượng phần tử cụ thể được sử dụng để mô tả một đối tượng ở định dạng này: chỉ định số lượng phần tử cần thiết.

Cách mở định dạng XML chuẩn

Bây giờ hãy xem cách mở một tệp XML. Như nhiều người có thể đã hiểu, đây là một tệp văn bản, có nghĩa là cách dễ nhất để xem hoặc chỉnh sửa nó là sử dụng bất kỳ trình soạn thảo nào, ngay cả trình soạn thảo nguyên thủy nhất. Có, ít nhất là cùng một Notepad Notepad từ bộ Windows tiêu chuẩn.

Tuy nhiên, mọi thứ ở đây không đơn giản như vậy. Thực tế là việc nhấp đúp vào một tệp mà không thiết lập liên kết thích hợp với bất kỳ chương trình nào sẽ không mở được. Tốt nhất, hệ thống sẽ đưa ra danh sách các ứng dụng phù hợp nhất. Bạn có thể chọn một chương trình theo ý muốn, đồng thời đánh dấu vào ô bên cạnh tùy chọn để liên tục sử dụng ứng dụng đã chọn cho tất cả các tệp thuộc loại này.

Bạn có thể thực hiện theo cách khác bằng cách nhấp chuột phải vào tệp rồi chọn lệnh “Mở bằng…”, sau đó, chọn lại ứng dụng mong muốn từ danh sách hoặc chỉ định vị trí của thành phần thực thi chính (hầu hết thường thì đây là tệp EXE).

Cách thứ ba để mở tệp XML là khởi chạy chương trình trước tiên, sau đó sử dụng menu mở tệp (trong hầu hết các trường hợp, đây là Ctrl + O). Trong trường hợp này, việc sử dụng Notepad là hoàn toàn không cần thiết. Xin vui lòng, tệp sẽ mở ra mà không gặp bất kỳ sự cố nào trong cùng một ứng dụng Word và các ứng dụng tương tự. Ngay cả Microsoft Excel cũng có khả năng mở dữ liệu ở định dạng này.

Tuy nhiên, nếu có nhu cầu chỉnh sửa định dạng XML thì tốt hơn nên sử dụng các tiện ích chuyên nghiệp hỗ trợ cú pháp ngôn ngữ, ví dụ như Oxygen XML Editor, XML Marker hoặc EditiX Lite Version. Đương nhiên, đây không phải là tất cả các tiện ích có thể hoạt động với ngôn ngữ tệp ở mức cao nhất. Ngày nay bạn có thể tìm thấy rất nhiều chương trình như vậy.

Bây giờ là một vài lời về lý do tại sao đôi khi tệp XML xuất hiện lỗi khi mở. Thông thường, điều này là do vi phạm tính toàn vẹn của chính tệp, cũng như việc giới thiệu không chính xác các thuộc tính hoặc thẻ mô tả. Ngoài ra, Excel có giới hạn về số lượng hàng có thể được hiển thị nên trong trường hợp này dữ liệu có thể không đầy đủ khi mở.

Các lỗi có thể xảy ra khi mở tệp XML dưới dạng tệp đính kèm email

Đôi khi lỗi có thể xuất hiện khi bạn cố mở một tệp đính kèm email. Thông thường điều này áp dụng cho các ứng dụng email tiêu chuẩn như Outlook Express.

Thực tế là tệp đính kèm trước tiên được lưu dưới dạng dữ liệu tạm thời (rất thường xuyên có thêm .tmp được thêm vào phần mở rộng chính) và chính tệp này được truy cập.

Để tránh tình trạng này, ban đầu bạn chỉ cần lưu tệp đính kèm ở định dạng ban đầu vào bất kỳ vị trí thuận tiện nào trên đĩa hoặc phương tiện di động, sau đó sử dụng các phương pháp tiêu chuẩn được mô tả ở trên.

Thay vì tổng cộng

Như bạn có thể thấy, không có gì khó khăn khi hiểu cấu trúc và phương pháp mở tệp ở định dạng này. Tuy nhiên, ở đây, vấn đề tạo dữ liệu XML không được xem xét một cách cơ bản, vì để hiểu đầy đủ về quy trình, bạn cần phải biết ít nhất những điều cơ bản về chính ngôn ngữ đó. Nếu không, tôi nghĩ rằng người dùng sẽ không gặp bất kỳ khó khăn nào với các tệp có định dạng này.


Tôi đã làm việc với các tệp XML đã lâu nhưng đến bây giờ tôi mới tự hỏi mình câu hỏi: Làm cách nào để tạo và chỉnh sửa các tệp XML trong MS Excel bằng các công cụ tiêu chuẩn? Excel là một công cụ tiện lợi và trực quan để tạo, chỉnh sửa và xử lý nhiều dữ liệu khác nhau. Excel được học ở trường và có lẽ không có người nào biết cách làm việc trên PC và không biết những điều cơ bản khi làm việc trong Excel. Vì vậy, theo tôi, đây là công cụ phù hợp nhất có thể được khuyên dùng cho người dùng thông thường để tạo và chỉnh sửa các tệp dữ liệu cho nhiều ứng dụng khác nhau, bao gồm cả ứng dụng Web. Tôi đã cài đặt MS Excel 2013 ở nhà và sử dụng ví dụ của nó, tôi sẽ mô tả các quy trình đơn giản cần thực hiện khi tạo tệp dữ liệu XML trong Excel. Tôi nghĩ điều này cũng sẽ hoạt động trong các phiên bản Excel cũ hơn. Để tạo một tệp dữ liệu XML, hãy thực hiện một vài bước đơn giản. Hãy xem xét chúng bằng ví dụ về tạo tệp dữ liệu sự kiện.

1. Đầu tiên các bạn cần tạo và điền bảng dữ liệu trong Excel theo đúng cấu trúc dữ liệu. Vui lòng sử dụng mục menu cho việc này Chèn/Bảng.

2. Hãy tạo một lược đồ tệp XML. Để thực hiện việc này, hãy nhập các dòng sau vào trình soạn thảo văn bản và lưu chúng vào một tệp.

XHTML

0 0 0 0 Sự Phục Sinh tươi sáng của Chúa Kitô. Phục Sinh 0 0 -7 0 -7 Chúa vào thành Giê-ru-sa-lem 1

0

0

0

0

Sự Phục Sinh tươi sáng của Chúa Kitô. Phục Sinh

0

0

-7

0

-7

Chúa vào thành Giê-ru-sa-lem

1

3. Bây giờ hãy mở tab Nhà phát triển, Nhấn nút Nguồn và chỉ định tệp nguồn XML. Nếu cần, hãy bật mục menu Nhà phát triển trong Cài đặt Excel.

4. Vẫn còn phải so sánh các phần tử của sơ đồ và các cột của bảng bằng cách kéo các phần tử vào tiêu đề cột tương ứng.

5. Và bước cuối cùng: xuất dữ liệu bảng sang tệp XML bằng menu ngữ cảnh. Đứng tại ô bất kỳ trong bảng, nhấn chuột phải chọn XML/Xuất… và lưu tệp XML với tên mong muốn.

Lưu tệp Excel để chỉnh sửa và bổ sung sau này. Sau đó, đoạn 1.-4. sẽ không cần phải làm điều này!

tái bút Tại sao tôi lại viết ghi chú tầm thường này? Thứ nhất, để không quên, thứ hai, tôi nghĩ rằng thông tin này sẽ hữu ích cho người dùng, bắt đầu từ phiên bản tiếp theo 0.6 ;-)

Tôi muốn nói ở một nơi về một nhiệm vụ rất điển hình khi làm việc với XML, cụ thể là về việc tạo ra XML dựa trên cái hiện có. Hoạt động này sẽ bao gồm một số giai đoạn, trong đó các nhiệm vụ bổ sung sẽ được giải quyết, chẳng hạn như:

  • Sự sáng tạo XML dựa trên XSD, và ngược lại.
  • Tuần tự hóa và giải tuần tự hóa các đối tượng.
  • Tạo một lớp để tuần tự hóa trong tương lai từ XML hoặc XSD.
Trước khi bắt đầu, tôi dự định rằng người đọc sẽ quen thuộc với các từ XMLXSD. Liên quan đến XML, Tôi nghĩ không có vấn đề gì với điều này, nhưng đối với XSD Tôi có thể có thắc mắc về nó là gì. Nói ngắn gọn:
XSD là ngôn ngữ để mô tả XML. Và nếu bạn nhìn vào nội dung của tệp chứa mô tả này, câu hỏi sẽ đặt ra là tại sao lại mô tả các thẻ dường như hiển nhiên của bạn? XML? Nhưng hãy tưởng tượng rằng bạn đang tích hợp với một số hệ thống bên ngoài và bạn muốn sử dụng định dạng này để trao đổi dữ liệu XML. Vì thế, XSD cho phép bạn mô tả tên của từng phần tử, các thuộc tính có thể có, các trường hoặc thuộc tính bắt buộc và làm rõ rằng nội dung của thẻ chỉ có thể chứa một phần tử bên trong ( ) và không hơn, hoặc một nút có thể có một chuỗi các phần tử (< một> ... ). Khi hệ thống bên ngoài là của bạn thì có thể không có vấn đề gì, nhưng khi đó là bên thứ ba thì mô tả này qua XSD, sẽ là một công cụ để giải quyết tranh chấp về định dạng và ngoài ra, bằng cách sử dụng các tiện ích, bạn có thể kiểm tra tính tuân thủ của bất kỳ định dạng nào XMLđịnh dạng ban đầu.
Vậy chúng ta sẽ làm gì để học cách đóng dấu XML dựa trên tiêu chuẩn của bạn? Tôi sẽ mô tả mọi thứ theo thứ tự.

Có sẵn:
Một số loại XML (xmlfile.xml), được lưu ở định dạng văn bản vào một tệp. Dưới đây là văn bản:

< catalog > < book id = " bk101 " > < author >Gambardella, Matthew < title >Hướng dẫn dành cho nhà phát triển XML < genre >Máy tính < price > 44.95 < publish_date > 2000-10-01 < description >Một cái nhìn sâu sắc về việc tạo các ứng dụng bằng XML. < book id = " bk102 " > < author >Cuộc biểu tình, Kim < title >Mưa lúc nửa đêm < genre >Tưởng tượng < price > 5.95 < publish_date > 2000-12-16 < description >Một cựu kiến ​​trúc sư chiến đấu với lũ thây ma của công ty, một mụ phù thủy độc ác và tuổi thơ của chính mình để trở thành nữ hoàng của thế giới.

Các bước để tạo một cái mới:

  1. Đầu tiên sử dụng tiện ích XSD.exe, hoặc sử dụng các dịch vụ trực tuyến (tìm kiếm "xml to xsd" một trong số đó www.freeformatter.com/xsd-generator.html), chúng tôi sẽ tạo từ XML nguyên thủy của nó XSD Sự miêu tả. Ở đầu ra, chúng ta sẽ có một bản hoàn toàn được tạo tự động đầu ra.xsd một tập tin đã có thể sử dụng được nhưng có thể chưa hoàn chỉnh.
  2. Tiếp theo, dựa trên đầu ra.xsd , các lớp sẽ được tạo trong C# xmlclass.cs. Sau đó, chúng tôi thêm nó vào dự án của chúng tôi. Bạn có thể tạo một lớp bằng cách sử dụng XSD.exe hoặc mã xsd2 tiện ích hoặc bất kỳ dịch vụ trực tuyến nào.
  3. Bây giờ chúng ta đã sẵn sàng sử dụng các lớp tệp xmlclass.cs. Do đó, hãy tạo và điền vào các phiên bản bằng dữ liệu lớp xml, sau đó, bằng cách sử dụng quy trình tuần tự hóa, chúng ta sẽ chuyển đổi các đối tượng thành XML dòng, sau đó lưu nó vào một tập tin mới. Như vậy chúng ta có được XML dựa trên những gì có sẵn.
Bắt đầu nào!

Bước 1: Tạo XSD từ XML.

Vì vậy, đây là những phương pháp mà bản thân tôi sử dụng:
  1. Tính thiết thực xsd.exe- người sáng tạo Microsoft.
  2. Tính thiết thực xsd2code.exe- một ứng dụng của bên thứ ba có thể thực hiện mọi thứ tương tự như xsd.exe, nhưng có sẵn để tải xuống trực tiếp (hiện tại nó đã được trả tiền từ Sự thử nghiệm Giai đoạn).
  3. Sử dụng bất kỳ dịch vụ trực tuyến nào.
Để nhận được XSD.exe, bạn sẽ phải đặt bất kỳ SDK của Microsoft, đi kèm với ứng dụng này. Thật không may, hiện tại, không có studio nào đưa tiện ích này vào bộ sản phẩm của họ.

Link tải và cài đặt một trong SDK:
Windows SDK dành cho Windows 7 và .NET Framework 4.

Hãy sử dụng tính năng tìm kiếm và tìm tập tin xsd.exe, sau đó (để giúp công việc của chúng ta dễ dàng hơn), hãy sao chép nó vào thư mục được tạo trong thư mục gốc của đĩa C:\xmltoxsd. Tiếp theo, chúng tôi sao chép xmlfile.xml và mọi thứ đã sẵn sàng để bắt đầu.


Mở “Dấu nhắc lệnh” (Bắt đầu -> “Chạy” -> “cmd”), đi tới thư mục của chúng tôi và gọi nó với các tham số mặc định xsd.exe, chuyển xmlfile.xml của chúng tôi làm tham số:


Và chúng ta thấy có một file đã xuất hiện bên cạnh nó xmlfile.xsd với nội dung.


Đó là tất cả! Những hành động này đủ để tạo ra một nguyên thủy XSD tập tin để làm việc với. Nhưng đáng để hiểu rằng xsd.exe, giống như bất kỳ tiện ích nào khác, không biết gì về loại trường của bạn (vì vậy loại trường hầu như sẽ luôn là sợi dây), cũng như về tất cả các biến thể của thuộc tính và tham số. Nghĩa là, nếu một số thẻ không có thuộc tính trong XML, thì nó sẽ không có trong phần mô tả. Đó là lý do tại sao XML phải đầy đủ nhất và nếu phần tử có thể chứa nhiều trường con thì tốt hơn nên thêm ít nhất hai trường con để xsd.exe Tôi nhận ra rằng đây là một bộ sưu tập.

Cú pháp XSD không phức tạp lắm, vì vậy nếu bạn đang viết một mô tả khá nghiêm túc, bạn có thể phải làm việc với một tệp.

Bước 2: Tạo một lớp từ XSD.

Để tạo một lớp trong C#, chúng ta sẽ cần sử dụng lại xsd.exe nhưng với một tham số khác /các lớp học, đi qua con đường đến của chúng tôi xmlfile.xsd.


Sau khi thực thi, tệp xmlfile.cs sẽ xuất hiện, nội dung của tệp này được hiển thị bên dưới ở dạng nén:


Như bạn có thể thấy, đối với phần tử bên trong mục lục một lớp học đã được tạo ra danh mụcSách, các trường của nó tương ứng với các trường trong XML, và trường NHẬN DẠNGđược đánh dấu là một thuộc tính. Xsd.exe Tôi đã hiểu chính xác những gì bên trong mục lục một bộ sưu tập sách được lưu trữ, do đó tài sản xuất hiện Mặt hàng, để điền vào bộ sưu tập con.
Bình luận: xsd.exe không thể thêm nhận xét vào các lớp và trường kết quả. Trong mô tả XSD có một phần tử tên là< xs:annotation > , thường chứa nhất< xs:documentation >, bên trong là mô tả của trường. Về lý thuyết, nó nên được đặt trong phần mô tả ///, nhưng hiện tại xsd.exe từ chối thêm văn bản vào mô tả, vì vậy bạn phải sử dụng các lựa chọn thay thế như mã xsd2 hoặc các dịch vụ trực tuyến.

Bước 3: Tuần tự hóa các đối tượng thành XML.

Các lớp kết quả có trong tập tin xmlfile.cs. Tiếp theo, thêm nội dung của nó hoặc chính tệp đó vào dự án Visual Studio, sau đó bạn có thể làm việc với nó. Tôi sẽ tạo các đối tượng sách demo và sau đó lưu chúng vào một tệp có định dạng XML.

Ví dụ về khoảng trống riêng tư() ( // Tạo cuốn sách đầu tiên var book1 = new catalogBook () ( tác giả = "King" , description = "Cuốn sách rất thú vị" , thể loại = "Giả tưởng" , price = 22.ToString(), id = "42011" , title = "It" }; !} // Tạo cuốn sách thứ hai var book2 = new catalogBook () ( tác giả = "O"Brien, Tim" , description = "Sáng kiến ​​.NET của Microsoft được khám phá chi tiết trong tài liệu tham khảo dành cho lập trình viên chuyên sâu này.", thể loại = "Máy tính", giá = 36.ToString(), id = "30012" , title = "Microsoft .NET: Kinh thánh lập trình" }; // Tạo một phần tử gốc của thư mục chứa hai cuốn sách trên var catalog = new catalog() (Items = new(book1, book2)); // Chứa XML của đối tượng danh mục var xmlCatalog = Serialize(catalog); // Ghi một chuỗi vào một tập tin // TODO Được tạo ra nhằm mục đích trình diễn. Nên gọi phương thức Serialize để truyền Stream vào file Tệp .WriteAllText("Output.xml", xmlCatalog); ) chuỗi riêng tư Nối tiếp (TType sourceObject) ( if (sourceObject == null ) ( return string .Empty; ) // Sử dụng XmlSerializer để chuyển đổi nó thành chuỗi XML var xmlserializer = new XmlSerializer(typeof(TType)); var stringWriter = new StringWriter(); sử dụng (var writer = XmlWriter .Create(stringWriter, new XmlWriterSettings () ( Indent = true ))) ( xmlserializer.Serialize(writer, sourceObject); return stringWriter.ToString(); ) ) Sau khi chạy và mở Đầu ra.xml bạn có thể thấy rằng chúng tôi đã lưu nó theo cách chúng tôi muốn (Tệp dưới cùng - " Được tạo bằng mã").

Microsoft Excel là một công cụ thuận tiện để tổ chức và cấu trúc nhiều loại dữ liệu. Nó cho phép bạn xử lý thông tin bằng các phương pháp khác nhau và chỉnh sửa tập dữ liệu.

Hãy xem xét khả năng sử dụng nó để tạo và xử lý các tệp ứng dụng web. Bằng một ví dụ cụ thể, chúng ta sẽ nghiên cứu những kiến ​​thức cơ bản khi làm việc với XML trong Excel.

Cách tạo tệp XML từ Excel

XML là một tiêu chuẩn tệp để truyền dữ liệu trên Web. Excel hỗ trợ xuất và nhập.

Hãy xem việc tạo một tệp XML bằng ví dụ về lịch sản xuất.

  1. Hãy tạo một bảng mà bạn cần tạo tệp XML trong Excel và điền dữ liệu vào đó.
  2. Hãy tạo và chèn bản đồ XML với cấu trúc tài liệu được yêu cầu.
  3. Xuất dữ liệu bảng sang định dạng XML.

Chúng tôi lưu tệp dưới dạng XML.

Các cách khác để lấy dữ liệu XML (lược đồ):

  1. Tải về từ cơ sở dữ liệu, ứng dụng chuyên ngành kinh doanh. Đề án có thể được cung cấp bởi các trang web thương mại và dịch vụ. Các tùy chọn đơn giản có sẵn công khai.
  2. Sử dụng các mẫu làm sẵn để kiểm tra bản đồ XML. Các mẫu chứa các phần tử chính và cấu trúc XML. Sao chép và dán vào Notepad và lưu với phần mở rộng mong muốn.


Cách lưu file Excel ở định dạng XML

Một trong những lựa chọn:

  1. Bấm vào nút Văn phòng. Chọn “Lưu dưới dạng” - “Các định dạng khác”.
  2. Chúng tôi chỉ định một cái tên. Chọn vị trí lưu và loại tệp – XML.

Lựa chọn khác:

  1. Tải xuống trình chuyển đổi XLC sang XML. Hoặc tìm một dịch vụ cho phép bạn xuất file trực tuyến.
  2. Tải xuống Phần bổ trợ Công cụ XML từ trang web chính thức của Microsoft. Nó có sẵn miễn phí.
  3. Mở một cuốn sách mới. Nút văn phòng - "Mở".

Cách mở tệp XML trong Excel

Bấm vào đồng ý. Bạn có thể làm việc với bảng kết quả như với bất kỳ tệp Excel nào.

Cách chuyển đổi tệp XML sang Excel

Chúng ta chỉnh sửa bảng đã tạo và lưu ở định dạng Excel.

Cách thu thập dữ liệu từ file XML trong Excel

Nguyên tắc thu thập thông tin từ nhiều tệp XML cũng giống như nguyên tắc chuyển đổi. Khi chúng ta nhập dữ liệu vào Excel thì bản đồ XML cũng được chuyển đồng thời. Dữ liệu khác có thể được chuyển vào cùng một lược đồ.

Mỗi tập tin mới sẽ được liên kết với một bản đồ hiện có. Mỗi phần tử trong cấu trúc bảng tương ứng với một phần tử trong bản đồ. Chỉ cho phép một ràng buộc dữ liệu.

Để định cấu hình các tùy chọn liên kết, hãy mở công cụ Thuộc tính bản đồ từ menu Nhà phát triển.


Khả năng:

  1. Mỗi file mới sẽ được Excel kiểm tra xem có phù hợp với thẻ đã cài đặt hay không (nếu chúng ta đánh dấu vào ô bên cạnh mục này).
  2. Dữ liệu có thể được cập nhật. Hoặc thông tin mới sẽ được thêm vào bảng hiện có (rất hợp lý nếu bạn cần thu thập dữ liệu từ các tệp tương tự).

Đây đều là những cách thủ công để nhập và xuất tệp.

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ó thể 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ông trình này có thể xuất hiện ở bất kỳ đâu nhưng không thể 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. Tôi sẽ không nói ở đây 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 trên 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). Bằng cách 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 If m_adoRs. EOF Then GetTitlesXML = "" "truy vấn không trả về bất kỳ giá trị nào Khác If 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 In #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