XSLT - ویرایش XML

داده‌های ذخیره شده در فایل XML می‌توانند از طریق مرورگر اینترنت ویرایش شوند.

باز کردن، ویرایش و ذخیره XML

حالا، ما به شما نشان خواهیم داد که چگونه فایل XML ذخیره شده در سرور را باز کنید، ویرایش و ذخیره کنید.

ما از XSL برای تبدیل فایل XML به یک فرم HTML استفاده خواهیم کرد. مقادیر عناصر XML نوشته می‌شوند به فیلدهای ورودی HTML فرم. این فرم قابل ویرایش است. پس از ویرایش، داده‌ها به سرور ارسال می‌شوند و فایل XML به‌روزرسانی می‌شود (این بخش توسط ASP انجام می‌شود).

فایل XML و فایل XSL

ابتدا، به فایل XML مورد استفاده ("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>

فایل XML را مشاهده کنید.

در ادامه، به جدول استایل زیر نگاه کنید ("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>اطلاعات ابزار (ویرایش):</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 به هر میدان ورودی HTML برای ویژگی‌های id و name اضافه می‌شود. مقدار عنصر "value" به ویژگی "value" هر میدان ورودی HTML اضافه می‌شود. در نتیجه، می‌توان یک فرم HTML قابل ویرایش شامل مقادیر فایل XML دریافت کرد.

پس، ما یک استایل‌شابون دیگر نیز داریم: "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 را مشاهده کنید.

فایل ASP

در فایل "tool.xsl"، مقدار ویژگی action فرم HTML برابر با "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
باز داری مجموعه فرم
for i = 1 To Request.Form.Count
   عناصر دکمه فرم حذف شوند
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   مетод selectSingleNode می‌تواند یک نقطه در فایل XML که با یک جستجو هماهنگ است را پیدا کند.
   این جستجو درخواست می‌کند که element value را درخواست کند، این element value یک فرزند element field است،
   این element field دارای ویژگی id است که می‌تواند با کلید فعلی فرم هماهنگ باشد.
   اگر موجودی هماهنگی وجود دارد، متن ویژگی 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 می‌تواند در هر مرورگری اجرا شود.