| Timur Naimov |
19.02.2009 14:09 |
Цитата:
Сообщение от Ахадбек Далимов
(Сообщение 183340)
Цитата:
Сообщение от Erkin Kuchkarov
(Сообщение 183121)
То есть тяжело написать XSLT который бы обработал XML? Не верю.
|
Эркин ака, Тимур - покажите пример - напишите и поделитесь с товарищами ... ну как пример (инициатива ...)
|
Атхам ака, я уверен что работники Узинфокома знают о чем речь, но все равно попытаюсь формализовать свою мысль.
При получении XML от сторонней системы важно понимать формат данных. Для этого можно создать схему и выложить ее, например, на сайте www.uz. Тогда, при условии соотвествия выдаваемого XML этой схеме, я точно буду знать в каком элементе/аттрибуте искать информацию.
Пример схемы
Код:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://StatExport"
elementFormDefault="qualified"
targetNamespace="http://StatExport">
<xsd:element name="statspreadsheet" type="StatSpreadsheetType" />
<xsd:complexType name="StatSpreadsheetType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="table" type="TableType" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="TableType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="row" type="RowType" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="RowType">
<xsd:sequence maxOccurs="1">
<xsd:element name="id" type="GUID" />
<xsd:element name="date" type="xsd:dateTime" />
<xsd:element name="allHosts" type="xsd:int" />
<xsd:element name="uzHosts" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="GUID">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The representation of a GUID, generally the id of an element.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})|(\{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\})" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
А это сам XML, соответсвующий вышеуказанной схеме
Код:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="StatExport.xslt" ?>
<statspreadsheet xmlns="http://StatExport">
<table>
<row>
<id>79605499-E7F2-4828-8512-DA3C1D10B11F</id>
<date>2009-02-01T00:00:00</date>
<allHosts>100</allHosts>
<uzHosts>50</uzHosts>
</row>
<row>
<id>9520D33C-001A-4f59-92CC-75029CFC7199</id>
<date>2009-02-02T00:00:00</date>
<allHosts>90</allHosts>
<uzHosts>40</uzHosts>
</row>
</table>
</statspreadsheet>
Ну и в конце можно написать XSLT для того, чтобы трансформировать (при необходимости) полученный XML во что-нибудь другое, например
Код:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:se="http://StatExport">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>
<xsl:template match="se:statspreadsheet">
<html>
<head>
<title>Stat Export</title>
</head>
<body>
<xsl:apply-templates select="se:table">
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="se:table">
<table cellpadding="2px" cellspacing="2px">
<xsl:apply-templates select="se:row">
</xsl:apply-templates>
</table>
</xsl:template>
<xsl:template match="se:row">
<tr>
<td>
<xsl:value-of select="se:id"/>
</td>
<td>
<xsl:value-of select="se:date"/>
</td>
<td>
<xsl:value-of select="se:allHosts"/>
</td>
<td>
<xsl:value-of select="se:uzHosts"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
Инстркция
Код:
<?xml-stylesheet type="text/xsl" href="StatExport.xslt" ?>
в файле XML сообщает браузеру что нужно применить XSLT и в итоге, я получаю HTML:
Код:
<html xmlns:se="http://StatExport">
<head>
<title>Stat Export</title>
</head>
<body>
<table cellpadding="2px" cellspacing="2px">
<tr>
<td>79605499-E7F2-4828-8512-DA3C1D10B11F</td>
<td>2009-02-01T00:00:00</td>
<td>100</td>
<td>50</td>
</tr>
<tr>
<td>9520D33C-001A-4f59-92CC-75029CFC7199</td>
<td>2009-02-02T00:00:00</td>
<td>90</td>
<td>40</td>
</tr>
</table>
</body>
</html>
Тут не важно с какими продуктами работают клиенты. Привязки к вендору нет - просто XML. К томе же есть Open XML Format SDK 2.0, используя который можно легко создавать таблицы в формате open xml.
|