XSLT - Chỉnh sửa XML

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>

Xem tệp XML.

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>

Xem tệp XSL.

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>

Xem tệp XSL.

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.