XSLT yordamida XML’ni tahrirlash
XML fayllarda saqlangan ma’lumotlarni internet-brauzerdan tahrirlash mumkin.
XML’ni ochish, tahrirlash va saqlash
Endi serverda saqlanadigan XML faylni qanday ochish, tahrirlash va saqlashni ko‘rsatamiz.
XML hujjatni HTML formaga aylantirish uchun XSL’dan foydalanamiz. XML elementlarining qiymatlari HTML formadagi HTML kiritish maydonlariga yoziladi. HTML formani tahrirlash mumkin. Ma’lumotlar tahrirlangandan so‘ng ular serverga qaytarib yuboriladi va XML fayl yangilanadi (PHP va ASP uchun ham kod ko‘rsatamiz).
XML fayl va XSL fayl
Avval XML hujjatga ("tool.xml") qarang:
<?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>So‘ngra quyidagi uslublar jadvaliga ("tool.xsl") qarang:
<?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>Yuqoridagi XSL fayl XML fayldagi elementlar bo‘ylab sikl bilan o‘tadi va har bir XML "field" elementi uchun bitta kiritish maydonini yaratadi. XML "field" elementining "id" atributi qiymati har bir HTML kiritish maydonining ham "id", ham "name" atributlariga qo‘shiladi. Har bir XML "value" elementining qiymati har bir HTML kiritish maydonining "value" atributiga qo‘shiladi. Natijada XML fayldagi qiymatlarni o‘z ichiga olgan, tahrirlanadigan HTML forma hosil bo‘ladi.
Keyin ikkinchi uslublar jadvalimiz bor: "tool_updated.xsl". Bu yangilangan XML ma’lumotlarini ko‘rsatish uchun ishlatiladigan XSL fayl. Bu uslublar jadvali natijasida tahrirlanadigan HTML forma emas, balki statik HTML jadval hosil bo‘ladi:
<?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 fayl
Yuqoridagi "tool.xsl" faylida HTML formaning action atributini "edittool.php" ga o‘zgartiring.
"edittool.php" sahifasida ikkita funksiya bor: loadFile() funksiyasi XML faylni ko‘rsatish uchun yuklaydi va o‘zgartiradi, updateFile() funksiyasi esa o‘zgarishlarni XML faylga qo‘llaydi:
<?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");
}
?>
Maslahat: Agar PHP’da kod yozishni bilmasangiz, PHP darsligimizni o‘rganing.
Eslatma: Transformatsiyani bajarish va o‘zgarishlarni XML faylga qo‘llashni serverda amalga oshiramiz. Bu kross-brauzer yechim. Mijoz serverdan faqat HTML qaytarib oladi — u esa istalgan brauzerda ishlaydi.
ASP fayl
Yuqoridagi "tool.xsl" faylidagi HTML formaning action atributi qiymati "edittool.asp".
"edittool.asp" sahifasida ikkita funksiya bor: loadFile() funksiyasi XML faylni ko‘rsatish uchun yuklaydi va o‘zgartiradi, updateFile() funksiyasi esa o‘zgarishlarni XML faylga qo‘llaydi:
<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
'Load XML and XSL file
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
'Transform file
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
'Load XML file
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
'Set the rootEl variable equal to the root element
Set rootEl = xmlDoc.documentElement
'Loop through the form collection
for i = 1 To Request.Form.Count
'Eliminate button elements in the form
if instr(1,Request.Form.Key(i),"btn_")=0 then
'The selectSingleNode method queries the XML file for a single node
'that matches a query. This query requests the value element that is
'the child of a field element that has an id attribute which matches
'the current key value in the Form Collection. When there is a match -
'set the text property equal to the value of the current field in the
'Form Collection.
set f = rootEl.selectSingleNode("field[@id='" & _
Request.Form.Key(i) & "']/value")
f.Text = Request.Form(i)
end if
next
'Save the modified XML file
xmlDoc.save xmlfile
'Release all object references
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
'Load the modified XML file with a style sheet that
'allows the client to see the edited information
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
'If form is submitted, update the XML file and display result
' - if not, transform the XML file for editing
if Request.Form("btn_sub")="" then
loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")
else
updateFile server.MapPath("tool.xml")
end if
%>W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
