XSLT - ویرایش XML

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

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

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

ما از XSL برای تبدیل مستند XML به یک فرم HTML استفاده خواهیم کرد. مقادیر عناصر XML در فرم HTML به عنوان میدان‌های ورودی 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"، مقدار attribute 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 که با یک جستجو تطابق دارد را پیدا کند
   این جستجو درخواست یک عنصر value می‌کند، این عنصر value یک فرزند عنصر field است
   و این عنصر 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 موجود در سرور هستیم. این یک راه‌حل چندپlatforم است. کاربران فقط می‌توانند HTML بازگشتی از سرور را دریافت کنند - که می‌تواند در هر مرورگری اجرا شود.