XSL XML XSLT Microsoft XML Parser msxsl exe

  • Slides: 31
Download presentation

Применение XSL-преобразования к XMLдокументу • Отдельные процессоры XSLT – Microsoft XML Parser • msxsl.

Применение XSL-преобразования к XMLдокументу • Отдельные процессоры XSLT – Microsoft XML Parser • msxsl. exe xml-файл xslt-файл -o output. File – Saxon (Michael Kay) • http: //users. iclway. co. uk/mhkay/saxon/ – Oracle XSLT • http: //technet. oracle. com/tech/xml/ – Xalan (Apache Project) • http: //xml. apache. orj/xalan-j/index. html • Браузеры – Microsoft Internet Explorer • Инструкция по обработке <? xml-stylesheet type="text/xsl" href="planets. xsl"? > • Для других браузеров в соответствии с рекомендациями WWW <? xml-stylesheet type="text/xml" href="planets. xsl"? > 3

XSLT-преобразования в MS IE 6. 0 и выше • <? xml version="1. 0"? >

XSLT-преобразования в MS IE 6. 0 и выше • <? xml version="1. 0"? > <? xml-stylesheet type="text/xsl" href="planets. xsl"? > <PLANETS> <PLANET> <NAME>Mercury</NAME> <MASS UNITS="(Earth = 1)">. 0553</MASS> <DAY UNITS="days">58. 65</DAY> <RADIUS UNITS="miles">1516</RADIUS> <DENSITY UNITS="(Earth = 1)">. 983</DENSITY> <DISTANCE UNITS="million miles">43. 4</DISTANCE><!--В перигелии--> </PLANET> <NAME>Venus</NAME> <MASS UNITS="(Earth = 1)">. 815</MASS> <DAY UNITS="days">116. 75</DAY> <RADIUS UNITS="miles">3716</RADIUS> <DENSITY UNITS="(Earth = 1)">. 943</DENSITY> <DISTANCE UNITS="million miles">66. 8</DISTANCE> </PLANET> <NAME>Earth</NAME> <MASS UNITS="(Earth = 1)">1</MASS> <DAY UNITS="days">1</DAY> <RADIUS UNITS="miles">2107</RADIUS> <DENSITY UNITS="(Earth = 1)">1</DENSITY> <DISTANCE UNITS="million miles">128. 4</DISTANCE> </PLANETS> 4

XSLT-преобразования в MS IE 6. 0 и выше • <? xml version="1. 0"? >

XSLT-преобразования в MS IE 6. 0 и выше • <? xml version="1. 0"? > <xsl: stylesheet xmlns: xsl="http: //www. w 3. org/TR/WD-xsl"> <xsl: template match="/PLANETS"> <HTML> <HEAD><TITLE>The Planets Table</TITLE></HEAD> <BODY> <H 1>The Planets Table</H 1> <TABLE BORDER="2"> <TR> <TD>Name</TD> <TD>Mass</TD> <TD>Radius</TD> <TD>Day</TD> </TR> <xsl: apply-templates/> </TABLE> </BODY> </HTML> </xsl: template> <xsl: template match="PLANET"> <TR> <TD><xsl: value-of select="NAME"/></TD> <TD><xsl: apply-templates select="MASS"/></TD> <TD><xsl: apply-templates select="RADIUS"/></TD> <TD><xsl: apply-templates select="DAY"/></TD> </TR> </xsl: template> </xsl: stylesheet> 5

Выбор имени и массы • <? xml version="1. 0"? > <xsl: stylesheet version="1. 0"

Выбор имени и массы • <? xml version="1. 0"? > <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: strip-space elements="*"/> <xsl: output method="xml" indent="yes"/> <xsl: template match="/"> <xsl: apply-templates/> </xsl: template> <xsl: template match="PLANETS"> <xsl: copy> <xsl: apply-templates/> </xsl: copy> </xsl: template> <xsl: template match="PLANET"> <xsl: copy> <xsl: apply-templates/> </xsl: copy> </xsl: template> <xsl: template match="NAME"> <xsl: copy> <xsl: value-of select=". "/> </xsl: copy> </xsl: template> <xsl: template match="MASS"> <xsl: copy> <xsl: value-of select=". "/> <xsl: value-of select="@UNITS"/> </xsl: copy> </xsl: template> <xsl: template match="RADIUS"> </xsl: template> <xsl: template match="DAY"> </xsl: template> <xsl: template match="DENSITY"> </xsl: template> <xsl: template match="DISTANCE"> </xsl: template> </xsl: stylesheet> 6

Деревья и узлы (2) • <? xml version="1. 0"? > <library> <book> <title> Earthquakes

Деревья и узлы (2) • <? xml version="1. 0"? > <library> <book> <title> Earthquakes for Lunch </title> <title> Volcanoes for Dinner </title> </book> </library> 8

Тело шаблона (1) • Тело состоит из – разобранных символьных данных (PCDATA) – инструкций

Тело шаблона (1) • Тело состоит из – разобранных символьных данных (PCDATA) – инструкций XSLT • • • • • <xsl: apply-imports> <xsl: apply-templates> <xsl: attribute> <xsl: call-template> <xsl: choose> <xsl: comment> <xsl: copy-of> <xsl: element> <xsl: fallback> <xsl: for-each> <xsl: if> <xsl: message> <xsl: number> <xsl: processing-instruction> <xsl: text> <xsl: value-of> <xsl: variable> 15

Встроенные таблицы стилей • <? xml version="1. 0"? > <? xml-stylesheet type="text/xml" href="#stylesheet"? >

Встроенные таблицы стилей • <? xml version="1. 0"? > <? xml-stylesheet type="text/xml" href="#stylesheet"? > <!DOCTYPE PLANETS [ <!ELEMENT PLANET (CUSTOMER)*> <!ELEMENT CUSTOMER (NAME, MASS, RADIUS, DAY)> <!ELEMENT NAME (#PCDATA)> <!ELEMENT MASS (#PCDATA)> <!ELEMENT RADIUS (#PCDATA)> <!ELEMENT DAY (#PCDATA)> <!ELEMENT xsl: stylesheet (xsl: template)*> <!ELEMENT xsl: template (#PCDATA)> <!ATTLIST xsl: stylesheet id ID #REQUIRED version CDATA #IMPLIED> ]> <PLANETS>. . . </PLANETS> <xsl: stylesheet version="1. 0" id="stylesheet" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform">. . . </xsl: stylesheet> 20

Шаблоны (подробнее) • • • Простое использование <xsl: apply-templates/> указывает процессору XSLT осуществлять поиск

Шаблоны (подробнее) • • • Простое использование <xsl: apply-templates/> указывает процессору XSLT осуществлять поиск всех шаблонов, выбирающих дочерние узлы контекстного узла. Применять шаблоны в определенном порядке, или иным образом выбрать применяемые шаблоны можно при помощи атрибута select элемента <xsl: apply-templates/>. <xsl: template match="PLANET"> <TR> <TD><xsl: value-of select="NAME"/></TD> <TD><xsl: apply-templates select="MASS"/></TD> <TD><xsl: apply-templates select="RADIUS"/></TD> <TD><xsl: apply-templates select="DAY"/></TD> </TR> </xsl: template> <xsl: template match="MASS"> <xsl: value-of select=". "/> </xsl: template> <xsl: template match="RADIUS"> <xsl: value-of select=". "/> </xsl: template> <xsl: template match="DAY"> <xsl: value-of select=". "/> </xsl: template> 23

Создание значений атрибутов (1) • • Можно создать атрибуты с нуля при помощи элемента

Создание значений атрибутов (1) • • Можно создать атрибуты с нуля при помощи элемента <xsl: attribute> и присоединить их к элементу в выходном дереве Шаблон значения атрибута – <? xml version="1. 0" encoding="UTF-8"? > <PLANETS> <PLANET DAY="58. 65 days" RADIUS="1516 miles" MASS=". 0553 (Earth = 1)" NAME="Mercury"/>. . . </PLANETS> – Так нельзя! <xsl: template match="PLANET"> <PLANET NAME="<xsl: value-of select="NAME"/>" MASS="<xsl: value-of select="MASS"/>" DAY="<xsl: value-of select="DAY"/>"/> </xsl: template> – Следует <xsl: template match="PLANET"> <PLANET NAME="{NAME}" MASS="{MASS}" RADIUS="{RADIUS}" DAY="{DAY}"/> </xsl: template> или с обращением к значениям атрибутов <xsl: template match="PLANET"> <PLANET NAME="{NAME}" MASS="{MASS} {MASS/@UNITS}" RADIUS="{RADIUS} {RADIUS/@UNITS}" DAY="{DAY} {DAY/@UNITS}"/> </xsl: template> 25