En son web geliştirme öğreticiler
 

XSLT - Düzenleme XML


XML dosyalarında saklanan veriler bir Internet tarayıcısından düzenlenebilir.


Açık, düzenleme ve Kaydet XML

Şimdi, açabilir, düzenleyebilir ve sunucuda depolanan bir XML dosyasını kaydetmek için nasıl gösterecektir.

Biz bir HTML forma XML belgesini dönüştürmek için XSL kullanacağız. XML elemanlarının değerleri bir HTML biçiminde bir HTML giriş alanları yazılır. HTML formu düzenlenebilir. Verileri düzenledikten sonra, veri sunucuya geri sunulacak ve XML dosyası güncellenecektir oluyor (we will show code for both PHP and ASP) .


XML Dosyası ve XSL Dosyası

İlk olarak, XML belgesine bir göz atın ("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>

XML dosyası görüntüle .

Ardından, şu stil sayfası bakmak ("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>

XSL dosyasını görüntüleme .

XSL dosyası yukarıdaki XML dosyasındaki öğeleri arasında döngüsü ve her XML için tek bir giriş alanını oluşturur "field" unsuru. XML değeri "field" öğesinin "id" özniteliği hem eklenir "id" ve "name" her HTML giriş alanı niteliklerini. Her XML değeri "value" eleman eklenir "value" her HTML giriş alanının özelliğinde. Sonuç XML dosyasından değerleri içeren düzenlenebilir bir HTML formudur.

: Sonra, ikinci bir stil sayfası var "tool_updated.xsl" . Bu güncellenmiş XML verilerini görüntülemek için kullanılacak XSL dosyasıdır. Bu stil sayfası düzenlenebilir bir HTML formunda, ancak statik bir HTML tablosunun neden olmaz:

<?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>

XSL dosyasını görüntüleme .


ASP Dosyası

HTML formu "tool.xsl" dosyasının üzerinde bir değere sahip bir eylem niteliği vardır "edittool.asp" .

"edittool.asp" sayfa iki işlev içerir loadFile() işlevi yükler ve ekran ve XML dosyası dönüştüren updateFile() işlevi XML dosyasına değişiklikleri geçerlidir:

<%
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: Eğer ASP yazmak için nasıl bilmiyorsanız, bizim çalışma lütfen ASP öğretici .


PHP Dosya

In "tool.xsl" , yukarıda dosyaya HTML formun işlem özelliğini değiştirmek "edittool.php" .

"edittool.php" sayfa iki işlev içerir loadFile() işlevi yükler ve ekran ve XML dosyası dönüştüren updateFile() işlevi XML dosyasına değişiklikleri geçerlidir:

<?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");
}
?>

İpucu: PHP, nasıl bilmiyorsanız, bizim çalışma lütfen PHP öğretici .

Note: Biz dönüşümünü yapıyor ve sunucudaki XML dosyasına değişiklikleri uygulamaktadırlar. Bu çapraz tarayıcı bir çözümdür. herhangi bir tarayıcıda çalışacak - istemci yalnızca geri sunucudan HTML alacak.