XSLT - Chỉnh sửa XML
- Trang trước XSLT trên máy chủ
- Trang tiếp theo Bộ chỉnh sửa XSLT
Dữ liệu lưu trữ trong tệp XML có thể được chỉnh sửa bằng trình duyệt internet.
Mở, chỉnh sửa và lưu XML
Hiện tại, chúng tôi sẽ hướng dẫn bạn cách mở, chỉnh sửa và lưu tệp XML lưu trữ trên máy chủ.
Chúng tôi sẽ hướng dẫn bạn cách chuyển đổi tệp XML thành biểu mẫu HTML bằng XSL. Giá trị của các phần tử XML sẽ được viết vào trường nhập HTML trong biểu mẫu. Biểu mẫu này là có thể chỉnh sửa. Sau khi chỉnh sửa xong, dữ liệu sẽ được gửi lại máy chủ, tệp XML sẽ được cập nhật (phần này do ASP hoàn thành).
Tệp XML và tệp XSL
Trước tiên, hãy xem tệp XML sẽ được sử dụng ("tool.xml"):
<?xml version="1.0" encoding="ISO-8859-1"?> <tool> <field id="prodName"> <value>HAMMER HG2606</value> </field> <field id="prodNo"> <value>32456240</value> </field> <field id="price"> <value>$30.00</value> </field> </tool>
Tiếp theo, hãy xem bảng định dạng dưới đây ("tool.xsl"):
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <form method="post" action="edittool.asp"> <h2>Thông tin công cụ (sửa đổi):</h2> <table border="0"> <xsl:for-each select="tool/field"> <tr> <td> <xsl:value-of select="@id"/> </td> <td> <input type="text"> <xsl:attribute name="id"> <xsl:value-of select="@id" /> </xsl:attribute> <xsl:attribute name="name"> <xsl:value-of select="@id" /> </xsl:attribute> <xsl:attribute name="value"> <xsl:value-of select="value" /> </xsl:attribute> </input> </td> </tr> </xsl:for-each> </table> <br /> <input type="submit" id="btn_sub" name="btn_sub" value="Submit" /> <input type="reset" id="btn_res" name="btn_res" value="Reset" /> </form> </body> </html> </xsl:template> </xsl:stylesheet>
Tệp XSL này sẽ lặp qua các phần tử trong tệp XML và tạo một lĩnh vực nhập cho mỗi phần tử "field" XML. Giá trị thuộc tính id của phần tử field được thêm vào thuộc tính id và name của lĩnh vực nhập HTML. Giá trị của phần tử "value" được thêm vào thuộc tính "value" của lĩnh vực nhập HTML. Kết quả là, có thể được một biểu mẫu HTML có thể chỉnh sửa chứa các giá trị của tệp XML.
Sau đó, chúng ta còn có bảng định dạng thứ hai: "tool_updated.xsl". Tệp XSL này sẽ được sử dụng để hiển thị dữ liệu XML đã được cập nhật. Bảng định dạng này sẽ không xuất ra biểu mẫu HTML có thể chỉnh sửa mà là một bảng HTML tĩnh:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>Thông tin công cụ đã cập nhật:</h2> <table border="1"> <xsl:for-each select="tool/field"> <tr> <td><xsl:value-of select="@id" /></td> <td><xsl:value-of select="value" /></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Tệp ASP
Trong tệp "tool.xsl", giá trị thuộc tính action của biểu mẫu HTML là "edittool.asp".
Trang "edittool.asp" chứa hai hàm: loadFile() tải và chuyển đổi tệp XML, hàm updateFile() cập nhật tệp XML:
<% function loadFile(xmlfile,xslfile) Dim xmlDoc,xslDoc Tải tệp XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) Tải tệp XSL set xslDoc = Server.CreateObject("Microsoft.XMLDOM") xslDoc.async = false xslDoc.load(xslfile) Chuyển đổi tệp Response.Write(xmlDoc.transformNode(xslDoc)) end function function updateFile(xmlfile) Dim xmlDoc,rootEl,f Dim i Tải tệp XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) Đặt biến rootEl là phần tử gốc Set rootEl = xmlDoc.documentElement Lặp qua bộ sưu tập biểu mẫu for i = 1 To Request.Form.Count Loại bỏ phần tử nút trong biểu mẫu if instr(1,Request.Form.Key(i),"btn_")=0 then Phương thức selectSingleNode có thể tìm kiếm một nút duy nhất trong tệp XML khớp với một truy vấn Câu hỏi này sẽ yêu cầu phần tử value, phần tử value là phần tử con của phần tử field Mà phần tử field này có thuộc tính id có thể khớp với giá trị key hiện tại trong bảng đơn Nếu có sự khớp, thì đặt thuộc tính text là giá trị của lĩnh vực hiện tại trong bảng đơn set f = rootEl.selectSingleNode("field[@id='" & _ Request.Form.Key(i) & "]/value") f.Text = Request.Form(i) end if next Lưu tệp XML đã chỉnh sửa xmlDoc.save xmlfile Giải phóng tất cả các tham chiếu đối tượng set xmlDoc=nothing set rootEl=nothing set f=nothing Tải tệp XML đã chỉnh sửa thông qua một bảng định dạng, như vậy khách hàng có thể xem thông tin đã chỉnh sửa loadFile xmlfile,server.MapPath("tool_updated.xsl") end function 'Nếu biểu mẫu đã được gửi, hãy cập nhật tệp XML và hiển thị kết quả, nếu chưa được gửi, hãy chuyển đổi tệp XML này để chỉnh sửa if Request.Form("btn_sub")="" then loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl") else updateFile server.MapPath("tool.xml") end if %>
Lưu ý:Nếu bạn không biết cách viết ASP, hãy học cuốn của chúng tôi《Hướng dẫn ASP》。
Chú ý:Chúng tôi đang chuyển đổi và cập nhật tệp XML nằm trên máy chủ. Đây là giải pháp đa nền tảng. Khách hàng chỉ có thể nhận được HTML được trả về từ máy chủ - mà HTML có thể chạy trên bất kỳ trình duyệt nào.
- Trang trước XSLT trên máy chủ
- Trang tiếp theo Bộ chỉnh sửa XSLT