Валиков Алексей Н.
Шрифт:
Element elCookie = addElement(elRequest, "Cookie", null);
// Создаем по элементу для каждого из объектов cookies
for (int i=0; i < cookies.length; i++)
addElement(elCookie, cookies[i].getName, cookies[i].getValue);
// Преобразовываем созданный документ и выводим результат
try {
// Загружаем преобразование
XSLStylesheet stylesheet = new XSLStylesheet(
new URL("http://localhost/stylesheet.xsl"), null);
// Выполняем преобразование
XMLDocumentFragment fragment =
(XMLDocumentFragment)doc.transformNode(stylesheet);
// Выводим результат
fragment.print(out);
}
catch (MalformedURLException mue) {}
catch (XSLException xsle) {}
// Закрываем выходящий поток
out.close;
}
}
В этом сервлете вместо того, чтобы просто печатать в выходящий поток данные и HTML-разметку, в переменной
doc
мы генерируем DOM-объект XML-документа. После того как все текстовые узлы и узлы элементов будут сгенерированы, документ, содержащийся в переменной doc
, примет приблизительно следующий вид. Листинг 9.24. XML-документ, сгенерированный в сервлете
<Request>
<General>
<ServerName>aphrodite.fzi.de</ServerName>
<ServerPort>80</ServerPort>
<RemoteAddr>127.0.0.1</RemoteAddr>
<Protocol>HTTP/1.1</Protocol>
<Method>GET</Method>
<RequestURI>/servlet/example1</RequestURI>
<QueryString>x=1&y=2&z=3&x=4&y=5&z=6
</QueryString>
</General>
<Param>
<z>3</z>
<z>6</z>
<y>2</y>
<y>5</y>
<x>1</x>
<x>4</x>
</Param>
<Session>
<v>4</v>
</Session>
<Cookie>
<content>apple jam</content>
<JServSessionIdroot>aaenbyjqc0</JServSessionIdroot>
</Cookie>
</Request>
После того как генерация документа завершена, к нему применяется преобразование
stylesheet.xsl
, которое создает его HTML-представление. Листинг 9.25. Преобразование stylesheet.xsl
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Request">
<html>
<head>
<title>Request information</title>
</head>
<body><xsl:apply-templates mode="table"/></body>
</html>
</xsl:template>
<xsl:template match="*" mode="table">
<h1><xsl:apply-templates select="." mode="header"/></h1>
<table><xsl:apply-templates mode="row"/></table>
</xsl:template>
<xsl:template match="General" mode="header">
<xsl:text>General information</xsl:text>
</xsl:template>