1. 새 vs2003 웹 프로젝트를 생성하고 이름을 XMLTest로 지정합니다.
2. 프로젝트 디렉터리에서 WebForm1.aspx의 모든 내용을 삭제하고 맨 위에 명령문 하나만 남겨 둡니다:
<%@ Page Language="c#" Codebehind="WebForm1.aspx .cs" AutoEventWireup="false" Inherits="XMLTest.WebForm1" %>
3. WebForm1.aspx.cs의 내용을 수정하고 Page_Load에 추가합니다.
다음은 참조 조각입니다.
XmlDocument doc=new XmlDocument();
문자열 xmlfile=string.Empty;
xmlfile=Context.Request.PhysicalApplicationPath+(Request.QueryString["sel"].ToString()=="xml"?" \hello.xml":"\hello.xsl ");
doc.Load(xmlfile);
Response.Write(doc.InnerXml);
4. 프로젝트 루트 디렉터리에 test.htm을 추가하고 프로젝트 홈페이지로 설정합니다.
다음은 인용문입니다.
<html>
<머리>
<제목></제목>
</head>
<본문>
<div id="resTree"></div>
<FONT Face="宋体"></FONT><input type="button" value="Execute" onclick="GetXml()"><BR>
<스크립트 언어="JScript">
var srcTree,xsltTree,xt;
var http_request = false;
함수 GetXml()
{
srcTree = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
srcTree.async=false;
xsltTree= new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
xsltTree.async = 거짓;
xt=new ActiveXObject("MSXML2.XSLTemplate");
resTree.innerHTML="";
makeRequest("WebForm1.aspx?sel=xml",GetXml_CB);
}
함수 makeRequest(url,콜백) {
http_request = 거짓;
if (window.XMLHttpRequest) { // 모질라, 사파리,...
http_request = 새로운 XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
노력하다 {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} 잡기 (e) {
노력하다 {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} 잡기 (e) {}
}
}
if (!http_request) {
Alert('포기합니다 :( XMLHTTP 인스턴스를 생성할 수 없습니다.');
거짓을 반환;
}
http_request.onreadystatechange = 콜백;
http_request.open('GET', url, true);
http_request.send(null);
}
함수 GetXml_CB() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
srcTree.loadXML(http_request.responseText);
makeRequest("WebForm1.aspx?sel=xsl",GetXsl_CB);
} 또 다른 {
Alert('요청에 문제가 있습니다.');
}
}
}
함수 GetXsl_CB(){
if (http_request.readyState == 4) {
if (http_request.status == 200) {
xsltTree.loadXML(http_request.responseText);
xt.stylesheet=xsltTree;
var proc=xt.createProcessor();
proc.input=srcTree;
proc.transform();
resTree.innerHTML=proc.output;
} 또 다른 {
Alert('요청에 문제가 있습니다.');
}
}
}
함수 makeRequest(url,callback) {
http_request = 거짓;
if (window.XMLHttpRequest) { // 모질라, 사파리,...
http_request = 새로운 XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
노력하다 {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} 잡기 (e) {
노력하다 {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} 잡기 (e) {}
}
}
if (!http_request) {
Alert('포기합니다 :( XMLHTTP 인스턴스를 생성할 수 없습니다.');
거짓을 반환;
}
http_request.onreadystatechange = 콜백;
http_request.open('GET', url, true);
http_request.send(null);
}
</script>
</body>
</html>
5. 프로젝트를 실행하고 효과를 확인하세요!
hello.xml (참고: 내 xml 문서는 해당 xsl 구문 분석 파일 이름을 지정하지 않습니다.)
다음은 인용문입니다.
<?xml version='1.0'?>
<아침 메뉴>
<음식>
<name>벨기에 와플</name>
<가격>$5.95</가격>
<description>유명한 벨기에 와플 2개
진짜 메이플시럽을 듬뿍 넣어요.</description>
<칼로리>650</칼로리>
</food>
<음식>
<name>딸기 벨기에 와플</name>
<가격>$7.95</가격>
<설명>가벼운 벨기에 와플
딸기와 휘핑크림</description>
<칼로리>900</칼로리>
</food>
<음식>
<name>베리베리 벨기에 와플</name>
<가격>$8.95</가격>
<설명>가벼운 벨기에 와플 커버
다양한 신선한 베리와 함께
그리고 휘핑 크림.</description>
<칼로리>900</칼로리>
</food>
<음식>
<name>프렌치 토스트</name>
<가격>$4.50</가격>
<설명>직접 만든 두툼한 슬라이스
사워도우 빵.</description>
<칼로리>600</칼로리>
</food>
<음식>
<name>가정식 아침 식사</name>
<가격>$6.95</가격>
<설명>계란 2개, 베이컨이나 소시지, 토스트,
그리고 항상 인기 있는 해시 브라운도 있습니다.</description>
<칼로리>950</칼로리>
</food>
</breakfast-menu>
hello.xsl
다음은 인용된 부분입니다.
<?xml 버전="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl=" http://www.w3.org/1999/XSL/Transform ">
<xsl:template match="/breakfast-menu">
<xsl:for-each select="food">
<DIV STYLE="배경색:청록색; 색상:흰색; 패딩:4px">
<SPAN STYLE="font-weight:bold; color:white"><xsl:value-of select="name"/></SPAN>
<xsl:value-of select="price"/>로
</DIV>
<DIV STYLE="margin-left:20px; margin-bottom:1em; 글꼴 크기:10pt">
<xsl:value-of select="설명"/>
<SPAN STYLE="글꼴 스타일:기울임꼴">
<xsl:value-of select="칼로리"/> 안녕하세요
</SPAN>
</DIV>
</xsl:for-each>
</xsl:템플릿>
</xsl:스타일시트>
xml 문서에는 순수한 데이터만 포함되어 있습니다. html 페이지에 표시해야 하는 경우 일반적으로 사용자 정의된 xsl 문서를 사용하여 구문 분석하거나 js를 통해 xml의 값을 수동으로 읽고 이를 dom 트리에 표시해야 합니다. html.xsl 문서를 사용하는 경우 파싱 시 해당 xml 문서에 해당 xsl 문서를 지정해야 정상적으로 표시되지만, 일부 프로그램에서는 xml 문서를 동적으로 출력하는 경우 해당 xsl 문서를 지정하지 않습니다. 물론, 서버 측에서 XML 문서를 출력할 때 해당 xsl 문서를 구문 분석하려면 일부 XML API를 통해서도 얻을 수 있습니다. 여기서 설명하는 것은 JS를 통해 수행하는 방법입니다. 이러한 방식으로 서버 플랫폼의 제한 사항은 제쳐두고 서버는 해당 xml 문서(.net/j2ee 허용)만 출력하고 해당 xsl 문서를 클라이언트에 출력하면 됩니다(스트림 또는 직접 출력 가능). 클라이언트에서 xsl 문서를 로드함).
여기서 주의할 점이 몇 가지 있습니다. 일반적으로 Msxml2.Document 구성 요소를 사용하여 xml 문서를 로드하지만 xsl을 동적으로 사용하여 xml 문서를 구문 분석하는 경우 Msxml2.FreeThreadedDOMDocument와 같은 자유 스레드 구성 요소를 사용해야 하며 MSXML2.XSLTemplate을 사용해야 합니다. 템플릿 구성 요소는 MSXML2의 변환 방법을 통해 업데이트된 msxml 구성 요소 패키지를 설치하고 Msxml2.FreeThreadedDOMDocument.4.0과 같은 새 이름을 지정하는 데 사용됩니다. M$ 웹사이트에서 다운로드할 수 있습니다.
데모: http://www.21cz.cn/xmltest/test.htm
xml 파일 보기: http://www.21cz.cn/xmltest/hello.xml
Xsl 파일 보기: http://www.21cz.cn/xmltest/hello.xsl