Документ XML. Описание структуры документа средствами DTD.Схема документа на языке XSD. Оформление документа средствами XSLT., страница 2

<xs:element name="Price-list" msdata:IsDataSet="true" msdata:Locale="ru-RU" msdata:EnforceConstraints="False">

<xs:complexType>

<xs:choice maxOccurs="unbounded">

<xs:element name="firm">

<xs:complexType>

<xs:sequence>

<xs:element name="name" type="xs:string" minOccurs="0" />

<xs:element name="adress" minOccurs="0" maxOccurs="unbounded">

<xs:complexType>

<xs:sequence>

<xs:element name="city" type="xs:string" minOccurs="0" />

<xs:element name="street" type="xs:string" minOccurs="0" />

<xs:element name="house" type="xs:string" minOccurs="0" />

<xs:element name="zip" type="xs:string" minOccurs="0" />

<xs:element name="phone-list" minOccurs="0" maxOccurs="unbounded">

<xs:complexType>

<xs:sequence>

<xs:element name="phone" nillable="true" minOccurs="0" maxOccurs="unbounded">

<xs:complexType>

<xs:simpleContent msdata:ColumnName="phone_Text" msdata:Ordinal="0">

<xs:extension base="xs:string"></xs:extension>

</xs:simpleContent>

</xs:complexType>

</xs:element>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:element name="good" minOccurs="0" maxOccurs="unbounded">

<xs:complexType>

<xs:sequence>

<xs:element name="description" minOccurs="0" maxOccurs="unbounded">

<xs:complexType>

<xs:sequence>

<xs:element name="model" type="xs:string" minOccurs="0" />

<xs:element name="parametrs" type="xs:string" minOccurs="0" />

<xs:element name="price" type="xs:string" minOccurs="0" />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:sequence>

<xs:attribute name="name" form="unqualified" type="xs:string" />

</xs:complexType>

</xs:element>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:choice>

</xs:complexType>

</xs:element>

</xs:schema>

XSL файл

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">    

<html>           

<head>

<title>Прайс лист</title>

</head>

<body>

<a name="home"></a>

<h1> СПИСОК ФИРМ</h1>

<xsl:for-each select="//firm">

<h2><a href="#firm{position()}">

<xsl:value-of select="name"/>

</a></h2>

<p>

<xsl:text>Адрес: </xsl:text><br/>

<xsl:for-each select="adress">

<p>

<xsl:value-of select="city"/><xsl:text> </xsl:text>

<xsl:value-of select="street"/><xsl:text> </xsl:text>

<xsl:value-of select="house"/><xsl:text> </xsl:text>

<xsl:value-of select="zip"/><xsl:text> </xsl:text><br/>

<xsl:text>Телефон:</xsl:text><br/>

<xsl:for-each select="phone-list">

<xsl:value-of select="phone"/><br/>

</xsl:for-each>

</p>   

</xsl:for-each>

</p>

</xsl:for-each>

<h1> ПРАЙС ЛИСТ</h1>              

<xsl:apply-templates />       

</body>

</html>

</xsl:template>

<xsl:template match="firm">

<h2>

<a name="firm{position()}"><xsl:value-of select="name"/></a>

</h2>

<xsl:for-each select="good">

<h3><xsl:value-of select="@name"/><xsl:text> </xsl:text><br/></h3>

<table width="50%" border="1">

<tr bgcolor="#CCCCCC">

<td align="center">

<strong>Модель</strong>

</td>

<td align="center">

<strong>Параметры</strong>

</td>

<td align="center">

<strong>Цена</strong>

</td>

</tr>

<xsl:for-each select="description">

<tr bgcolor="#F5F5F5">

<td align="center">

<strong>

<xsl:value-of select="model"/>

</strong>

</td>

<td align="center">

<strong>

<xsl:value-of select="parametrs"/>

</strong>

</td>

<td align="center">

<strong>

<xsl:value-of select="price"/>

</strong>

</td>

</tr>

</xsl:for-each>

</table>

</xsl:for-each>

<a href="#home">На первую страницу</a>

</xsl:template>

</xsl:stylesheet>