ویرایش XML (XSLT Edit XML)
اینجا «ویرایش XML با XSLT» را می بینی. XSLT یعنی تبدیل XML به HTML. فرم HTML یعنی همان فیلدهای قابل ویرایش. هدف این است: XML را به فرم تبدیل کنیم، ویرایش کنیم، سپس دوباره XML را ذخیره کنیم.
باز کردن، ویرایش و ذخیره XML
ابتدا XML را می خوانیم. سپس با XSLT یک فرم می سازیم. کاربر فرم را ویرایش می کند. در پایان، داده ویرایش شده در XML ذخیره می شود. این کار سمت سرور انجام می شود تا در همه مرورگرها کار کند.
فایل XML نمونه (tool.xml)
این XML چند «field» دارد. هر «field» یک «id» و یک «value» دارد. مثل برگه نمرات که هر سطر، یک فیلد است.
<?xml version="1.0" encoding="UTF-8"?>
<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>
XSLT فرم ویرایش (tool.xsl)
این XSLT هر «field» را به یک ورودی متن تبدیل می کند. مقدار «id» به «id» و «name» ورودی می رود. مقدار «value» به «value» ورودی می رود. مثل برگه ثبت نام که فیلدها آماده است.
<?xml version="1.0" encoding="UTF-8"?>
<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>
XSLT نمایش نتیجه به روزشده (tool_updated.xsl)
پس از ذخیره، با این XSLT فقط جدول ثابت می سازیم. دیگر فرم نیست. این مثل کارنامه چاپ شده است.
<?xml version="1.0" encoding="UTF-8"?>
<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>
فایل PHP (edittool.php)
اینجا دو تابع داریم. loadFile برای نمایش. updateFile برای بروزرسانی. SimpleXML و XSLTProcessor کمک می کنند.
<?php
function loadFile($xml, $xsl)
{
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
$xslDoc = new DOMDocument();
$xslDoc->load($xsl);
$proc = new XSLTProcessor();
$proc->importStyleSheet($xslDoc);
echo $proc->transformToXML($xmlDoc);
}
function updateFile($xml)
{
$xmlLoad = simplexml_load_file($xml);
$postKeys = array_keys($_POST);
foreach ($xmlLoad->children() as $x)
{
foreach ($_POST as $key => $value)
{
if ($key == $x->attributes())
{
$x->value = $value;
}
}
}
$xmlLoad->asXML($xml);
loadFile($xml, "tool_updated.xsl");
}
if ($_POST["btn_sub"] == "")
{
loadFile("tool.xml", "tool.xsl");
}
else
{
updateFile("tool.xml");
}
?>
فایل ASP (edittool.asp)
در ASP کلاسیک از MSXML استفاده می کنیم. با selectSingleNode مقدار «value» را عوض می کنیم. سپس فایل ذخیره می شود.
<%
function loadFile(xmlfile, xslfile)
Dim xmlDoc, xslDoc
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
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
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
Set rootEl = xmlDoc.documentElement
for i = 1 To Request.Form.Count
if instr(1, Request.Form.Key(i), "btn_") = 0 then
set f = rootEl.selectSingleNode("field[@id='" & _
Request.Form.Key(i) & "']/value")
f.Text = Request.Form(i)
end if
next
xmlDoc.save xmlfile
set xmlDoc = nothing
set rootEl = nothing
set f = nothing
loadFile xmlfile, server.MapPath("tool_updated.xsl")
end function
if Request.Form("btn_sub") = "" then
loadFile server.MapPath("tool.xml"), server.MapPath("tool.xsl")
else
updateFile server.MapPath("tool.xml")
end if
%>
گام های عملی
- tool.xml و tool.xsl را در سرور قرار بده.
- اکشن فرم را به PHP یا ASP تغییر بده.
- فرم را باز کن و فیلدها را ویرایش کن.
- ارسال کن تا XML ذخیره شود و جدول نمایش یابد.
برای نتیجه سمت سرور ببین: XSLT سمت سرور. همین طور اجرای مرورگر: XSLT سمت کلاینت. برای مثال های بیشتر: مثال های XSLT. همچنین: ویرایش XML با XSLT.
جمع بندی سریع
- XSLT فرم قابل ویرایش می سازد.
- ارسال فرم، XML را به روز می کند.
- نمایش نهایی جدول ثابت است.
- اجرای سرور، سازگاری کامل می دهد.