XSLT - Edit XML

Ang data na nakaimbak sa XML file ay maaaring i-edit gamit ang internet browser.

Buksan, i-edit, at i-save ang XML

Ngayon, ipapakita namin kung paano buksan, i-edit, at i-save ang XML file na nakaimbak sa server.

Magkakaroon tayo ng paggamit ng XSL upang i-convert ang XML dokumento sa isang HTML form. Ang halaga ng XML na elemento ay ililipat sa HTML input field ng form. Ang form na ito ay maaaring ipalit. Pagkatapos ng pagwawasto, ang data ay ililipat pabalik sa server, at ang XML file ay mababago (ang bagay na ito ay ginagawa ng ASP).

Ang XML file at ang XSL file

Unang-una, tingnan ang gagamitin na XML document ("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>

Tingnan ang XML file.

Pagkatapos, tingnan ang sumusunod na stylesheet("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>Information ng Tool (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>

Tingnan ang XSL file.

Ang XSL na file na ito ay mag-aabot sa bawat elemento ng XML file at magbibigay ng isang input field para sa bawat "field" na elemento ng XML. Ang halaga ng atributo ng id ng "field" na elemento ay idinagdag sa bawat HTML input field sa mga atributo ng id at name. Ang halaga ng elemento na "value" ay idinagdag sa atributo ng "value" ng bawat HTML input field. Ang resulta, makakakuha ka ng isang editable na HTML form na naglalaman ng mga halaga ng XML file.

Pagkatapos, mayroon pa namin pang ikalawang style sheet: "tool_updated.xsl". Ginagamit ang XSL file na ito upang ipakita ang pinag-aupdate na XML data. Ang style sheet na ito ay hindi naglalabas ng puwedeng-ipalilagay sa HTML form, kundi isang statikong HTML table:

<?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>Updated Tool Information:</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>

Tingnan ang XSL file.

ASP file

Sa "tool.xsl" na file, ang halaga ng attribute na action ng HTML form ay "edittool.asp" .

"edittool.asp" na pahina ay naglalaman ng dalawang function: loadFile() na inilalagay at nagbabagong XML file, at updateFile() na function na nag-aupdate ng XML file:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
I-load ang file XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
Maglilingkod ng XSL file
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
Gawing salin ang file
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
I-load ang file XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
I-set ang variable na rootEl bilang ang root element
Set rootEl = xmlDoc.documentElement
Umikot sa koleksyon ng form
for i = 1 To Request.Form.Count
   Alisin ang elemento ng button sa form
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   Ang method na selectSingleNode ay maaaring maghanap ng isang single node na tumugma sa query sa file XML
   Ang query na ito ay hihiling ang value element, ang value element ay isang anak ng element ng field
   At ang element ng field ay may id attribute na maaring tumugma sa kasalukuyang key value ng form set
   Kung may katugma, ay i-set ang text attribute bilang ang halaga ng kasalukuyang domain ng form set
   set f = rootEl.selectSingleNode("field[@id='" & _
   Request.Form.Key(i) & "/value")
   f.Text = Request.Form(i)
   end if
next
I-save ang napagwawastong file XML
xmlDoc.save xmlfile
Lihis ang lahat ng paggamit ng object reference
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
Sa pamamagitan ng isang stylesheet, i-load ang napagwawastong file XML, upang makakita ng client ang binagong impormasyon
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
Kung ang form ay nairekumponde, ay i-update ang file XML at ipakita ang resulta, kung hindi nairekumponde, ay i-convert ang file XML para sa pagwawasto
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 可运行于任何浏览器。