XSLT - XML 편집

XML 파일에 저장된 데이터는 인터넷 브라우저를 통해 편집할 수 있습니다.

XML 파일을 열고, 편집하고, 저장

이제, 서버에 저장된 XML 파일을 열고, 편집하고, 저장하는 방법을 보여드리겠습니다.

우리는 XSL을 사용하여 XML 문서를 HTML 형식의 양식으로 변환할 것입니다. XML 요소의 값은 HTML 입력 필드에 쓰일 것입니다. 이 양식은 편집 가능합니다. 편집이 완료되면, 데이터는 서버로 제출되고 XML 파일이 업데이트됩니다(이 부분은 ASP에서 처리됩니다).

XML 파일과 XSL 파일

먼저, 사용될 XML 문서("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</value> 
  </field>
</tool>

XML 파일을 확인.

그런 다음, 아래 스타일 시트("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>도구 정보 (편집):</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 파일을 확인하십시오.

위의 XSL 파일은 XML 파일의 요소를 순회하며, 각 XML "field" 요소에 입력 필드를 생성합니다. field 요소의 id 속성 값이 각 HTML 입력 필드의 id 및 name 속성에 추가됩니다. "value" 요소의 값이 각 HTML 입력 필드의 "value" 속성에 추가됩니다. 결과적으로, XML 파일의 값을 포함한 편집 가능한 HTML 양식을 얻을 수 있습니다.

그런 다음, 우리는 두 번째 스타일 시트: "tool_updated.xsl"를 가지고 있습니다. 이 XSL 파일은 업데이트된 XML 데이터를 표시하는 데 사용됩니다. 이 스타일 시트는 편집 가능한 HTML 양식을 출력하지 않고, 정적 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>업데이트된 도구 정보:</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 파일을 확인하십시오.

ASP 파일

"tool.xsl" 파일에서, HTML 양식의 action 속성 값은 "edittool.asp"입니다.

"edittool.asp" 페이지에는 두 가지 함수가 포함되어 있습니다: loadFile() 함수는 XML 파일을 로드하고 변환하며, updateFile() 함수는 XML 파일을 업데이트합니다:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
XML 파일을 로드합니다
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
XSL 파일을 로드합니다
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
파일을 변환합니다
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
XML 파일을 로드합니다
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
rootEl 변수를 루트 요소로 설정합니다
Set rootEl = xmlDoc.documentElement
form 집합을 순회합니다
for i = 1 To Request.Form.Count
   폼에서의 버튼 요소를 제거합니다
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   selectSingleNode 메서드는 특정 쿼리와 일치하는 XML 파일의 단일 노드를 검색할 수 있습니다
   이 쿼리는 value 요소를 요청합니다. 이 value 요소는 field 요소의 자식 요소입니다
   이 field 요소는 현재 key 값과 일치하는 id 속성을 가집니다
   일치하는 것이 있다면, 현재 폼 집합에서의 필드 값으로 text 속성을 설정합니다
   set f = rootEl.selectSingleNode("field[@id='" & _
   Request.Form.Key(i) & "/value")
   f.Text = Request.Form(i)
   end if
next
수정된 XML 파일을 저장합니다
xmlDoc.save xmlfile
모든 객체 참조를 해제합니다
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
XML 파일을 스타일 시트를 통해 로드하여 클라이언트가 편집한 정보를 볼 수 있습니다
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
"폼이 이미 제출되면 XML 파일을 업데이트하고 결과를 표시하며, 제출되지 않았으면 이 XML 파일을 편집할 수 있도록 변환합니다"
if Request.Form("btn_sub")="" then
loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")
else
updateFile server.MapPath("tool.xml")
end if
%>

알림:ASP를 작성하는 방법을 알지 못하시다면, 우리의 《ASP 강의》。

주의:서버에 있는 XML 파일을 변환하고 업데이트 중입니다. 이는 플랫폼에 따라 다른 솔루션입니다. 클라이언트는 서버에서 반환된 HTML만을 받을 수 있으며, HTML은 모든 브라우저에서 실행될 수 있습니다.