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 ta 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 ta sẽ sử dụng XSL để chuyển đổi tài liệu XML thành biểu mẫu HTML. Giá trị của các yếu tố XML sẽ được ghi vào lĩnh vực 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 hoàn tất, 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ụ (chỉnh sửa):</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 lại và duyệt qua các phần tử trong tệp XML và tạo một lĩnh vực đầu vào cho mỗi phần tử "field" trong XML. Giá trị của 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 đầu vào 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 đầu vào HTML. Kết quả là, bạn có thể nhận được một biểu mẫu HTML có thể chỉnh sửa chứa các giá trị trong tệp XML.

thì, 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" trên, giá trị thuộc tính action của biểu mẫu HTML là "edittool.asp".

"edittool.asp" trang web chứa hai hàm: loadFile() tải và chuyển đổi tệp XML, updateFile() hàm cập nhật tệp XML:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
đọc tệp XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
tải XSL tệp
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
đọc tệp XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
đặt biến rootEl là element gốc
Set rootEl = xmlDoc.documentElement
vòng lặp qua tập form
for i = 1 To Request.Form.Count
   loại bỏ các element 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 element value, element value là con của element field
   và element field này có thuộc tính id có thể khớp với giá trị key hiện tại trong tập biểu mẫu
   nếu có khớp, hãy đặt thuộc tính text là giá trị của lĩnh vực hiện tại trong tập biểu mẫu
   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
để 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 thì 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 từ bài học 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 trên máy chủ. Đây là giải pháp đa nền tảng. Client 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.