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은 어떤 브라우저에서도 실행될 수 있습니다.