XSLT - edycja XML
- Poprzednia strona XSLT na serwerze
- Następna strona Edytor XSLT
Dane przechowywane w pliku XML można edytować za pomocą przeglądarki internetowej.
Otwieranie, edytowanie i zapisywanie XML
Teraz pokażemy, jak otworzyć, edytować i zapisać plik XML przechowywany na serwerze.
Użyjemy XSL do przekształcenia dokumentu XML do formularza HTML. Wartości elementów XML będą zapisywane w polach wejściowych HTML formularza. Ten formularz jest edytowalny. Po zakończeniu edycji dane będą wysłane z powrotem do serwera, a plik XML zostanie zaktualizowany (to jest zrobione przez ASP).
Pliki XML i XSL
Oto dokument XML, który zostanie użyty ("tool.xml"):
<?xml version="1.0" encoding="ISO-8859-1"?> <tool> <field id="prodName"> <value>Hammer HG2606</value> </field> <field id="prodNo"> <value>32456240</value> </field> <field id="price"> <value>30,00 PLN</value> </field> </tool>
Następnie, zobacz poniższy arkusz stylów ("tool.xsl"):
<?xml version="1.0" encoding="ISO-8859-1"?> <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>Informacje o narzędziu (edytowanie):</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>
Wymieniony powyżej plik XSL będzie przechodził przez elementy pliku XML i dla każdego elementu "field" XML utworzy pole wejściowe. Wartość atrybutu id elementu field zostanie dodana do atrybutów id i name każdego pola wejściowego HTML. Wartość elementu "value" zostanie dodana do atrybutu "value" każdego pola wejściowego HTML. W rezultacie można uzyskać formularz HTML do edycji zawierający wartości z pliku XML.
Następnie mamy drugą tablicę stylową: "tool_updated.xsl". Ten plik XSL będzie używany do wyświetlania zaktualizowanych danych XML. Ta tablica stylowa nie wyświetli formularza HTML do edycji, ale statystyczny tabelę HTML:
<?xml version="1.0" encoding="ISO-8859-1"?> <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>
Plik ASP
W pliku "tool.xsl", wartość atrybutu action formularza HTML wynosi "edittool.asp".
Strona "edittool.asp" zawiera dwie funkcje: loadFile() do załadowania i konwersji pliku XML oraz updateFile() do aktualizacji pliku XML:
<% function loadFile(xmlfile,xslfile) Dim xmlDoc,xslDoc Ładowanie pliku XML ustaw xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) Ładowanie pliku XSL ustaw xslDoc = Server.CreateObject("Microsoft.XMLDOM") xslDoc.async = false xslDoc.load(xslfile) Przekształcanie pliku Response.Write(xmlDoc.transformNode(xslDoc)) end function function updateFile(xmlfile) Dim xmlDoc,rootEl,f Dim i Ładowanie pliku XML ustaw xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) Ustawienie zmiennej rootEl na element korzenia Set rootEl = xmlDoc.documentElement Przetwarzanie zbioru formularzy for i = 1 To Request.Form.Count Usunięcie elementów przycisków z formularza Jeśli instr(1,Request.Form.Key(i),"btn_")=0 then Metoda selectSingleNode może wyszukiwać pojedynczy węzeł w pliku XML, który pasuje do zapytania. To zapytanie będzie prosić o element value, który jest podelementem elementu field, Ten element field ma atrybut id, który można dopasować do bieżącej wartości klucza formularza. Jeśli istnieje dopasowanie, ustaw atrybut text na wartość bieżącego pola formularza. ustaw 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 Zwolnienie wszystkich odniesień do obiektów ustaw xmlDoc=nothing ustaw rootEl=nothing ustaw f=nothing Ładowanie zmodyfikowanego pliku XML za pomocą arkusza stylów, tak aby klient mógł zobaczyć edytowane informacje loadFile xmlfile,server.MapPath("tool_updated.xsl") end function 'Jeśli formularz został złożony, zaktualizuj plik XML i wyświetl wynik, jeśli nie został złożony, przejdź do konwersji tego pliku XML do edycji if Request.Form("btn_sub")="" then loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl") else updateFile server.MapPath("tool.xml") end if %>
Wskazówka:Jeśli nie wiesz, jak pisać ASP, naucz się naszego:Tutorial ASP》。
Komentarz:Przetwarzamy i aktualizujemy plik XML znajdujący się na serwerze. Jest to rozwiązanie wieloplatformowe. Klient może uzyskać tylko HTML zwrócony przez serwer - a HTML może być uruchomiony w każdej przeglądarce.
- Poprzednia strona XSLT na serwerze
- Następna strona Edytor XSLT