Inne działy

 

XSLT - edycja XML

 

Dane przechowywane w plikach XML można edytować w przeglądarce internetowej.


 

Otwieranie, edytowanie i zapisywanie XML

Teraz pokażemy jak otwierać, edytować i zapisać plik XML, który jest przechowywany na serwerze.

Będziemy używać XSL do przekształcenia dokumentu XML w formularz HTML. Wartości elementów XML zostaną zapisane do pola wejściowego HTML w postaci HTML. Formularz HTML jest edytowalny. Po edycji danych, dane będą zwrócone z powrotem do serwera, a plik XML zostanie zaktualizowany (ta część jest wykonywana z ASP).


 

Plik XML i plik XSL

Po pierwsze spójrz na dokument XML, który będzie używany ("narzedzia.xml"):

 

<?xml version="1.0" encoding="UTF-8"?>
<narzedzie>
  <pole id="prodName">
    <wartosc>Still HG2606</wartosc>
  </pole>
  <pole id="prodNr">
    <wartosc>2342</wartosc>
  </pole>
  <pole id="cena">
    <wartosc>30.00</wartosc>
  </pole>
</narzedzie>

Następnie spójrz na poniższy arkusz stylów ("narzedzia.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="edycjanarzedzia.asp">
  <h2> Narzędzie informacji (Edytuj):</h2>
  <table border="0">
    <xsl:for-each select="narzedzie/pole">
    <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>

Plik XSL powyżej przechodzi przez elementy w pliku XML i tworzy jedno pole danych wejściowych dla każdego elementu XML "pole". Wartość atrybutu "id" elementu xml "pole" jest dodana do atrybutów "id" oraz "name" każdego pola wejściowego HTML. Wartość każdego elementu XML "value" dodaje się do atrybut "value" każdego pola wejściowego HTML. Wynikiem jest edytowalny formularz HTML, który zawiera wartości z pliku XML.

Następnie mamy drugi arkusz stylów: "narzedzia_updated.xsl". Jest to plik XSL, który będzie używany do wyświetlania aktualnych danych XML. Ten arkusz stylów nie będzie powodować edycji formularza HTML, ale statyczną tabelę HTML.

 

<?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> Zaktualizowane narzędzie informacji:</h2>
  <table border="1">
    <xsl:for-each select="narzedzie/pole">
    <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>

Plik ASP

Formularz HTML w powyższym pliku "narzedzia.xsl" ma atrybut akcji o wartości "edycjanarzedzia.asp".

Plik "edycjanarzedzia.asp" zawiera dwie funkcje: funkcje loadFile (), która wczytuje i przekształca plik XML do wyświetlania i updateFile (funkcja), która powoduje zmiany w pliku XML:

 

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
‘Wczytaj plik XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
'Wczytaj plik XSL 
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
'Przekształć plik
Response.Write(xmlDoc.transformNode(xslDoc))
end function

function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
'Wczytaj plik XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)

' Ustaw zmienną rootEl do elementu głównego 
Set rootEl = xmlDoc.documentElement

' Pętli kolekcji formularza
for i = 1 To Request.Form.Count
  ' Wyeliminować elementy w postaci 
  if instr(1,Request.Form.Key(i),"btn_")=0 then
    ' Metoda selectSingleNode kwerendy XML plik dla jednego węzła 
    ' który pasuje do kwerendy. Ta kwerenda zwraca wartość elementu, który jest 
    ' dziecko element pola, który ma identyfikator atrybutu, który odpowiada 
    ' Aktualna wartość klucza w kolekcji Form. Kiedy jest spotkania -
    ' ustawić właściwość tekstu równą wartości w bieżącym polu
    'Form Collection.
    set f = rootEl.selectSingleNode("field[@id='" & _
    Request.Form.Key(i) & "']/value")
    f.Text = Request.Form(i)
  end if
next

' Zapisz zmodyfikowany plik XML 
xmlDoc.save xmlfile

' Zwolnij wszystkie odwołania do obiektu 
set xmlDoc=nothing
set rootEl=nothing
set f=nothing

' Załaduj zmodyfikowany plik XML z arkusza stylów
' pozwala klientowi edytować informacje 
loadFile xmlfile,server.MapPath("narzedzia_updated.xsl")
end function

' Jeśli formularz został wysłany do aktualizacji 
' Plik XML i wyświetlania wyniku - jeśli nie,
' Przekształć plik XML do edycji 
if Request.Form("btn_sub")="" then
  loadFile server.MapPath("narzedzia.xml"),server.MapPath("narzedzia.xsl")
else
  updateFile server.MapPath("narzedzia.xml")
end if
%>

Uwaga:Robimy transformację i zastosowanie zmian w pliku XML na serwerze. To rozwiązanie dla różnych przeglądarek. Klient dostanie tylko HTML z serwera - który będzie działać w dowolnej przeglądarce.

 

Zobacz nasze wszystkie kursy

WWW


HTML
HTML - Znaczniki
CSS - Tutorial
CSS - Selektory
PHP
JavaScript

XML

XSLT

Bazy danych


SQL
SQLite
MySQL
PostgreSQL

 

 

Programowanie


C
C++
C#
Java
VisualBasic
Python

Linux


Podstawy Linuxa
Bash
Linuks artykuły

Windows


Excel funkcje
Windows wskazówki
Outlook

Pozotałe działy


Programy
Rozrywka

 

 

 

This email address is being protected from spambots. You need JavaScript enabled to view it.