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=новый XmlDocument();
Строка xmlfile=string.Empty;
xmlfile=Context.Request.PhysicalApplicationPath+(Request.QueryString["sel"].ToString()=="xml"?" \hello.xml":"\hello.xsl ");
документ.Загрузка(xmlфайл);
Response.Write(doc.InnerXml);
4. Добавьте test.htm в корневой каталог проекта и установите его в качестве домашней страницы проекта:
Ниже приведена цитата:
<html>
<голова>
<title></title>
</голова>
<тело>
<div id="resTree"></div>
<FONT face="宋体"></FONT><input type="button" value="Execute" onclick="GetXml()"><BR>
<script Language="JScript">
вар srcTree, xsltTree, xt;
вар http_request = ложь;
функция ПолучитьXml()
{
srcTree = новый ActiveXObject("Msxml2.FreeThreadedDOMDocument");
srcTree.async=false;
xsltTree = новый ActiveXObject("Msxml2.FreeThreadedDOMDocument");
xsltTree.async = ложь;
xt = новый ActiveXObject("MSXML2.XSLTemplate");
resTree.innerHTML="";
makeRequest("WebForm1.aspx?sel=xml",GetXml_CB);
}
функция makeRequest (url, обратный вызов) {
http_request = ложь;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = новый XMLHttpRequest();
если (http_request.overrideMimeType) {
http_request.overrideMimeType('текст/xml');
}
} else if (window.ActiveXObject) { // IE
пытаться {
http_request = новый ActiveXObject("Msxml2.XMLHTTP");
} поймать (е) {
пытаться {
http_request = новый ActiveXObject("Microsoft.XMLHTTP");
} поймать (е) {}
}
}
если (!http_request) {
alert('Отказ :( Невозможно создать экземпляр XMLHTTP');
вернуть ложь;
}
http_request.onreadystatechange = обратный вызов;
http_request.open('GET', URL, правда);
http_request.send(ноль);
}
функция GetXml_CB() {
if (http_request.readyState == 4) {
если (http_request.status == 200) {
srcTree.loadXML(http_request.responseText);
makeRequest("WebForm1.aspx?sel=xsl",GetXsl_CB);
} еще {
alert('Возникла проблема с запросом.');
}
}
}
функция GetXsl_CB(){
если (http_request.readyState == 4) {
если (http_request.status == 200) {
xsltTree.loadXML(http_request.responseText);
xt.stylesheet = xsltTree;
вар proc=xt.createProcessor();
proc.input=srcTree;
проц.трансформация();
resTree.innerHTML=proc.output;
} еще {
alert('Возникла проблема с запросом.');
}
}
}
function makeRequest(url,callback) {
http_request = ложь;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = новый XMLHttpRequest();
если (http_request.overrideMimeType) {
http_request.overrideMimeType('текст/xml');
}
} else if (window.ActiveXObject) { // IE
пытаться {
http_request = новый ActiveXObject("Msxml2.XMLHTTP");
} поймать (е) {
пытаться {
http_request = новый ActiveXObject("Microsoft.XMLHTTP");
} поймать (е) {}
}
}
если (!http_request) {
alert('Отказ :( Невозможно создать экземпляр XMLHTTP');
вернуть ложь;
}
http_request.onreadystatechange = обратный вызов;
http_request.open('GET', URL, правда);
http_request.send(ноль);
}
</script>
</body>
</html>
5. Запустите проект и посмотрите эффект!
hello.xml (Примечание: в моем xml-документе не указано соответствующее имя файла синтаксического анализа xsl).
Ниже приведен фрагмент цитаты:
<?xml version='1.0'?>
<меню-завтрака>
<еда>
<name>Бельгийские вафли</name>
<price>5,95 долларов США</price>
<description>Две наши знаменитые бельгийские вафли
с большим количеством настоящего кленового сиропа.</description>
<калории>650</калорий>
</еда>
<еда>
<name>Клубничные бельгийские вафли</name>
<price>7,95 долларов США</price>
<описание>Светлые бельгийские вафли, покрытые
клубника и взбитые сливки.</description>
<калории>900</калорий>
</еда>
<еда>
<name>Бельгийские вафли «Ягодно-ягодные»</name>
<price>8,95 долларов США</price>
<описание>Светлые бельгийские вафли в глазури
с ассортиментом свежих ягод
и взбитые сливки.</description>
<калории>900</калорий>
</еда>
<еда>
<name>Французский тост</name>
<price>4,50 доллара США</price>
<описание>Толстые ломтики нашего домашнего
хлеб на закваске.</description>
<калории>600</калорий>
</еда>
<еда>
<name>Домашний завтрак</name>
<price>6,95 долл. США</price>
<описание>Два яйца, бекон или колбаса, тост,
и наши неизменно популярные оладьи.</description>
<калории>950</калорий>
</еда>
</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="background-color:бирюзовый; цвет:белый; отступ:4px">
<SPAN STYLE="font-weight:bold; color:white"><xsl:value-of select="name"/></SPAN>
to<xsl:value-of select="price"/>
</DIV>
<DIV STYLE="margin-left:20px; Margin-bottom:1em; Font-size:10pt">
<xsl:value-of select="description"/>
<SPAN STYLE="font-style:italic">
<xsl:value-of select="калории"/> Привет!
</SPAN>
</DIV>
</xsl:for-each>
</xsl:template>
</xsl:таблица стилей>
Документ xml содержит только чистые данные. Если его необходимо отобразить на странице html, обычно необходимо использовать настроенный документ xsl для анализа или вручную прочитать значение в xml через js и отобразить его в дереве dom в файле. html. При использовании документа xsl При синтаксическом анализе соответствующий документ xsl должен быть указан в соответствующем документе xml, чтобы он отображался нормально. Однако, когда некоторые программы динамически выводят документ xml, соответствующий документ xsl не указывается. соответствующий документ xsl должен быть загружен другими способами. Конечно, для анализа при выводе XML-документов на стороне сервера это также можно сделать с помощью некоторых API-интерфейсов XML. Здесь я описываю способ добиться этого с помощью JS. Таким образом, ограничения серверной платформы отбрасываются в сторону. Серверу нужно только вывести соответствующий документ xml (допускается .net/j2ee) и вывести соответствующий документ xsl клиенту (он может выводить поток или напрямую). в Клиент загружает документ xsl).
Здесь следует отметить несколько вещей. Обычно мы используем компонент Msxml2.Document для загрузки документов XML, но при динамическом использовании xsl для анализа документов XML необходимо использовать компоненты свободного потока, такие как Msxml2.FreeThreadedDOMDocument, и необходимо использовать MSXML2.XSLTemplate. Используемые компоненты шаблона используются для загрузки данных xml и xsl. С помощью метода преобразования MSXML2 установите обновленный пакет компонента msxml и укажите новое имя, например Msxml2.FreeThreadedDOMDocument.4.0. Последняя версия компонента msxml — 6.0beta. можно скачать с сайта M$.
Демо: http://www.21cz.cn/xmltest/test.htm
Просмотр XML-файла: http://www.21cz.cn/xmltest/hello.xml
Посмотреть файл xsl: http://www.21cz.cn/xmltest/hello.xsl