XSLT - Mengedit XML
Data yang disimpan dalam file XML dapat diedit dari browser Internet.
Buka, Edit, dan Simpan XML
Sekarang, kami akan menunjukkan cara membuka, mengedit, dan menyimpan file XML yang disimpan di server.
Kami akan menggunakan XSL untuk mengubah dokumen XML menjadi bentuk HTML. Nilai elemen XML akan ditulis ke bidang input HTML dalam bentuk HTML. Formulir HTML dapat diedit. Setelah mengedit data, data akan dikirimkan kembali ke server dan file XML akan diperbarui (kami akan menampilkan kode untuk PHP dan ASP).
File XML dan File XSL
Pertama, lihat dokumen XML ("tool.xml"):
<?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>
Kemudian, lihat style sheet berikut ("tool.xsl"):
<?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>
File XSL di atas mengulang elemen dalam file XML dan membuat satu bidang input untuk setiap elemen "bidang" XML. Nilai atribut "id" elemen XML "bidang" ditambahkan ke atribut "id" dan "nama" dari setiap bidang input HTML. Nilai setiap elemen "nilai" XML ditambahkan ke atribut "nilai" dari setiap bidang masukan HTML. Hasilnya adalah formulir HTML yang dapat diedit yang berisi nilai-nilai dari file XML.
Kemudian, kami memiliki lembar gaya kedua: "tool_updated.xsl". Ini adalah file XSL yang akan digunakan untuk menampilkan data XML yang diperbarui. Lembar gaya ini tidak akan menghasilkan formulir HTML yang dapat diedit, tetapi tabel HTML statis:
<?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>
File PHP
Pada file "tool.xsl" di atas, ubah atribut action form HTML menjadi "edittool.php".
Halaman "edittool.php" berisi dua fungsi: Fungsi loadFile() memuat dan mengubah file XML untuk ditampilkan dan fungsi updateFile() menerapkan perubahan ke file XML:
<?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");
}
?>
Tip: Jika Anda tidak tahu cara menulis PHP, silakan pelajari tutorial PHP kami .
Catatan: Kami sedang melakukan transformasi dan menerapkan perubahan pada file XML di server. Ini adalah solusi lintas-browser. Klien hanya akan mendapatkan HTML kembali dari server - yang akan berfungsi di browser apa pun.
File ASP
Form HTML pada file "tool.xsl" di atas memiliki atribut action dengan nilai "edittool.asp".
Halaman "edittool.asp" berisi dua fungsi: Fungsi loadFile() memuat dan mengubah file XML untuk ditampilkan dan fungsi updateFile() menerapkan perubahan ke file XML:
<%
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
%>