XSLT - การแก้ไข XML

ຂໍ້ມູນທີ່ບັນຈຸໃນ XML ບັນຊີສາມາດເລື່ອງໄດ້ຜ່ານ ບັນຊີບັນນາທິການອິນເຕີເນັດ.

ເປີດ, ເລື່ອງ ແລະ ຮັກສາ XML

ຕອນນີ້, ພວກເຮົາຈະສະແດງໃຫ້ເຈົ້າເຫັນວິທີທີ່ເປີດ, ເລື່ອງ ແລະ ຮັກສາ XML ບັນຊີທີ່ບັນຈຸຢູ່ໃນທີ່ບໍລິຫານ.

ພວກເຮົາຈະໃຊ້ XSL ເພື່ອປ່ຽນ XML ບັນຊີເປັນ HTML ຟອມ. ຄູ່ມູນຂອງ XML ຈະຂຽນໄປໃນບ່ອນເຂົ້າ HTML ຂອງ HTML ຟອມ. ຟອມນີ້ສາມາດເລື່ອງໄດ້. ຫຼັງຈາກຖືກເລື່ອງແລ້ວ, ຂໍ້ມູນຈະຖືກສົ່ງຄືນຫາທີ່ບໍລິຫານ, XML ບັນຊີຈະຖືກປັບປຸງ (ສິ່ງນີ້ໂດຍ ASP).

ເບື້ອງຕົ້ນຈະເບິ່ງເອກະສານ 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>

.

ຕໍ່ມາຈະເບິ່ງການແບບ (\

<?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>Tool Information (edit):</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>

ກວດສອບ ບັນນາທິດ XSL.

ແຕ່ລະເອກະສານ XSL ຈະກຳລັງການລອດຫາສັບສິນລະຫວ່າງສັບສິນ XML ແລະຈະສ້າງປະຕູເຂົ້າສຳລັບຖະໜົນ "field" XML. ຄວາມຮູບຮ່າງຂອງຄວາມຄົນ id ຂອງສັບສິນ field ຈະຕື່ມເຂົ້າໃນຄວາມຄົນ id ແລະ name ຂອງ HTML ປະຕູເຂົ້າ. ຄວາມຄົນ "value" ຂອງ XML ຈະຕື່ມເຂົ້າໃນຄວາມຄົນ "value". ພາຍໃນນັ້ນຈະມີປະຕູເຂົ້າ HTML ທີ່ສາມາດປ່ຽນແປງຄວາມຄົນ XML ແລະເຮັດໃຫ້ມີປະຕູເຂົ້າ HTML ທີ່ສາມາດປ່ຽນແປງ.

ຫລັງຈາກນັ້ນ, ພວກເຮົາຍັງມີແບບກົດລະບຽບອີກຢ່າງດຽວ: "tool_updated.xsl". ບັນນາທິດ XSL ນີ້ຈະຖືກໃຊ້ສະແດງບັນນາທິດ XML ທີ່ໄດ້ປ່ຽນແປງ. ແບບກົດລະບຽບນີ້ຈະບໍ່ອອກແບບ HTML ບໍລິຫານເພີ່ມເຂົ້າ, ແຕ່ພຽງແຕ່ບັນນາທິດ HTML ຕາມການປ່ຽນແປງ:

<?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>ຂໍ້ມູນວຽກງານທີ່ໄດ້ປ່ຽນແປງ:</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>

ກວດສອບ ບັນນາທິດ XSL.

ເອສເພັນ

ໃນເວບໄຂ "tool.xsl" ບັນນາທິດ HTML ການປະຕິບັດ action ມີຄູ່ມີ "edittool.asp" .

"edittool.asp" ເວບໄຂບໍລິຫານມີຫນື່ງພາສາສອງຫນື່ງ: loadFile() ບັນທຶນແລະປ່ຽນບັນນາທິດ XML, updateFile() ພາສາຫນື່ງບັນທຶນປັບປຸງ XML ວ່າ:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
ຈະເອົາ XML ບັນທຶກ
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
ການອ່ານ ບັນນາທິດ XSL
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
ການປ່ຽນບັນນາທິດ
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
ຈະເອົາ XML ບັນທຶກ
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
ຈະຕັ້ງຄວາມຂອງ rootEl ສຳລັບຫົວຂໍ້ທໍາອິດ
Set rootEl = xmlDoc.documentElement
ຈະລະລືກວົງງານ form
for i = 1 To Request.Form.Count
   ຈະຫຼຸດອອກປະຕູບັນດາຟອມງານ
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   selectSingleNode ທີ່ສາມາດຊອກຫາຫົວຂໍ້ທີ່ຕິດຕໍ່ກັບການຊອກຫາຂອງ XML
   ທີ່ສາມາດຖາມວັດສະດຸ value ທີ່ເປັນລູກຂອງ field
   ທີ່ມີຄວາມແນວງາວທີ່ສາມາດຕິດຕໍ່ກັບຄຸນນະພາບຂອງບັນດາຟອມງານ
   ຖ້າມີການຕິດຕໍ່ ຈະຕັ້ງຄວາມຂອງ text ສຳລັບຄຸນນະພາບຂອງບັນດາຟອມງານ ທີ່ປະຈຸບັນ
   set f = rootEl.selectSingleNode("field[@id='" & _
   Request.Form.Key(i) & "/value")
   f.Text = Request.Form(i)
   end if
next
ຈະບັນທຶກ XML ທີ່ໄດ້ຖືກດັດແປງ
xmlDoc.save xmlfile
ຈະປະກອບການອ້າງອີກຂອງບັນດາໂອບຣອກ
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
ຈະດັດແປງ XML ທີ່ໄດ້ຖືກດັດແປງ ຜ່ານສາຍຈຸດທົບ ເພື່ອສະແດງຂໍ້ມູນທີ່ໄດ້ບັນທຶກ
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
ຖ້າຟອມງານໄດ້ຖືກສົ່ງຕົວແລ້ວ ຈະດັດແປງບັນທຶກ XML ແລະສະແດງຜົນຈາກບັນທຶກດັ່ງກ່າວ ຖ້າບໍ່ໄດ້ຖືກສົ່ງຕົວແລ້ວ ຈະປ່ຽນແປງ XML ດັ່ງກ່າວ ເພື່ອບັນທຶກ
if Request.Form("btn_sub")="" then
loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")
else
updateFile server.MapPath("tool.xml")
end if
%>

提示:假如您不了解如何编写 ASP,请学习我们的《ASP 教程》。

注释:我们正在转换并更新位于服务器上的 XML 文件。这是一个跨平台的解决方案。客户端仅能获得从服务器返回的 HTML - 而 HTML 可运行于任何浏览器。