tutorial pengembangan web terbaru
 

XSLT - Editing XML


Data disimpan dalam file XML dapat diedit dari browser internet.


Terbuka, Edit dan Simpan XML

Sekarang, kami akan menunjukkan bagaimana untuk membuka, mengedit, dan menyimpan file XML yang disimpan di server.

Kami akan menggunakan XSL untuk mengubah dokumen XML menjadi bentuk HTML. Nilai-nilai dari elemen XML akan ditulis ke field input HTML dalam bentuk HTML. Bentuk HTML dapat diedit. Setelah mengedit data, data tersebut akan diserahkan kembali ke server dan file XML akan diperbarui (we will show code for both PHP and ASP) .


XML file dan XSL Berkas

Pertama, lihatlah 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>

Lihat file XML .

Kemudian, lihatlah gaya berikut sheet ("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>

Lihat file XSL .

File XSL di atas loop melalui unsur-unsur dalam file XML dan menciptakan satu bidang masukan untuk setiap XML "field" elemen. Nilai dari XML "field" elemen "id" atribut ditambahkan ke kedua "id" dan "name" atribut dari setiap field input HTML. Nilai dari setiap XML "value" elemen ditambahkan ke "value" atribut dari masing-masing bidang masukan HTML. Hasilnya adalah bentuk HTML yang dapat diedit yang berisi nilai-nilai dari file XML.

Kemudian, kami memiliki style sheet kedua: "tool_updated.xsl" . Ini adalah file XSL yang akan digunakan untuk menampilkan data XML yang diperbarui. style sheet ini tidak akan menghasilkan bentuk HTML dapat diedit, tapi 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>

Lihat file XSL .


ASP Berkas

Bentuk HTML di "tool.xsl" file di atas memiliki atribut aksi dengan nilai "edittool.asp" .

The "edittool.asp" halaman berisi dua fungsi: The loadFile() beban fungsi dan mengubah file XML untuk tampilan dan updateFile() fungsi berlaku 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
%>

Tip: Jika Anda tidak tahu bagaimana menulis ASP, silakan belajar kami tutorial ASP .


PHP Berkas

Dalam "tool.xsl" mengajukan atas, mengubah atribut aksi berupa HTML untuk "edittool.php" .

The "edittool.php" halaman berisi dua fungsi: The loadFile() beban fungsi dan mengubah file XML untuk tampilan dan updateFile() fungsi berlaku 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 bagaimana menulis PHP, silakan belajar kami PHP tutorial .

Note: Kami melakukan transformasi dan menerapkan perubahan ke file XML pada server. Ini adalah solusi lintas-browser. klien hanya akan mendapatkan HTML kembali dari server - yang akan bekerja di browser apapun.