Стивен Холзнер - XSLT

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "XSLT"
Описание и краткое содержание "XSLT" читать бесплатно онлайн.
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
<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="PLANET[not(@COLOR) or not(@POPULATED)]">
</xsl:template>
<xsl:template match="MASS">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
<xsl:template match="RADIUS">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
<xsl:template match="DAY">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
</xsl:stylesheet>
А вот результат:
<HTML>
<HEAD>
<TITLE>
Colorful, Populated Planets
</TITLE>
</HEAD>
<BODY>
<H1>
Colorful, Populated Planets
</H1>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<TR>
<TD>Earth</TD>
<TD>1 (Earth = 1)</TD>
<TD>2107 miles</TD>
<TD>1 days</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Этот документ показан на рис. 4.3.
Рис. 4.3. Применение предикатов XPath для проверки атрибутов
В следующем примере я копирую planets.xml в новый XML-документ и изменяю текст в элементе <NAME> Венеры на "The Planet of Love" (планета любви). Для этого я сначала копирую в результирующий документ все узлы и атрибуты:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
.
.
.
Теперь я добавлю новое правило, выбирающее элементы <NAME> с текстом "Venus" (Венера) по образцу "NAME[text()='Venus']". Хотя элементы <NAME> удовлетворяют обоим правилам этой таблицы стилей, правило с образцом "NAME[text()='Venus']" осуществляет более узкий выбор, поэтому для элемента <NAME> Венеры процессор XSLT применит его:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="NAME[text() = 'Venus']">
<NAME>
The Planet of Love
</NAME>
</xsl:template>
</xsl:stylesheet>
И вот результат:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xml" 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><!--B перигелии-->
</PLANET>
<PLANET>
<NAME>
The Planet of Love
</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><!--B перигелии-->
</PLANET>
<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><!--B перигелии-->
</PLANET>
</PLANETS>
В действительности, в выражениях XPath можно ссылаться на контекстный узел при помощи ".", и значением по умолчанию для узла является его текст, поэтому следующее правило работает точно так же:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="NAME[. = 'Venus']">
<NAME>
The Planet of Love
</NAME>
</xsl:template>
</xsl:stylesheet>
Имеет смысл привести как можно больше примеров — примеров XPath или образцов выбора никогда не бывает слишком много. Ниже приведен содержательный ряд примеров образцов выбора:
• PLANET выбирает дочерние элементы <PLANET> контекстного узла;
• /PLANETS выбирает корневой элемент <PLANETS> документа;
• * выбирает все дочерние элементы контекстного узла;
• PLANET[3] выбирает третьего ребенка <PLANET> контекстного узла;
• PLANET[last()] выбирает последнего ребенка <PLANET> контекстного узла;
• PLANET[NAME] выбирает детей <PLANET> контекстного узла, имеющих детей <NAME>;
• PLANET[DISTANCE]/NAME выбирает все элементы <NAME> элементов <PLANET>, содержащих по крайней мере один элемент <DISTANCE>;
• PLANET[DISTANCE]/PLANET[DAY] выбирает все элементы <PLANET> элементов <PLANET>, в которых элемент <PLANET> содержит по крайней мере один элемент <DISTANCE>, и элемент <PLANET> содержит по крайней мере один элемент <DAY>;
• РLANETS[РLАNET/DAY] выбирает все элементы <PLANETS>, содержащие элементы <PLANET> как минимум с одним элементом <DAY>;
• PLANET[DISTANCE][NAME] выбирает все элементы <PLANET>, имеющие элементы <DISTANCE> и <NAME>;
• PLANETS/PLANET[last()] выбирает последний элемент <PLANET> в каждом элементе <PLANETS>;
• */PLANET выбирает всех внуков <PLANET> контекстного узла;
• /PLANETS/PLANET[3]/NAME[2] выбирает второй элемент <NAME> третьего элемента <PLANET> элемента <PLANETS>;
• //PLANET выбирает всех потомков <PLANET> корня документа;
• PLANETS//PLANЕТ выбирает потомков элемента <PLANET> детей элемента <PLANETS> контекстного узла;
• //PLANET/NAME выбирает все элементы <NAME>, дочерние по отношению к родителю <PLANET>;
• РLАNETS//PLАNET/DISTАNСЕ//РЕRIНЕLION выбирает элементы <PERIHELION> везде внутри элемента <DISTANCE> элемента <PLANET>, везде внутри элемента <PLANETS>;
• @UNITS выбирает атрибут UNITS контекстного узла;
• @* выбирает все атрибуты контекстного узла;
• *[@UNITS] выбирает все элементы с атрибутом UNITS;
• DENSITY/@UNITS выбирает атрибут UNITS в элементах <DENSITY>;
• PLANET[not(@COLOR) or not(@SIZE)] выбирает элементы <PLANET>, не имеющие обоих атрибутов COLOR и SIZE;
• PLANETS[@STAR="Sun"]//DENSITY выбирает любой элемент <DENSITY> с элементом-предком <PLANETS>, имеющим атрибут STAR со значением "Sun";
• PLANET[NAME="Venus"] выбирает детей <PLANET> контекстного узла, имеющих детей <NAME> с текстом "Venus";
• PLANET[NAME[1]="Venus"] выбирает все элементы <PLANET>, у которых в первом элементе <NAME> содержится текст в "Venus";
• DAY[@UNITS!="million miles"] выбирает все элементы <PLANET>, атрибут UNITS которых не равен "million miles";
• PLANET[@UNITS="days"] выбирает всех детей <PLANET> контекстного узла, имеющих атрибут UNITS со значением "days";
• PLANET[6][@UNITS="days"] выбирает шестого ребенка <PLANET> контекстного узла, только если у этого ребенка есть атрибут UNITS со значением "days", — что также можно записать как PLANET[@UNITS="days"][6];
• PLANET[@COLOR and @UNITS] выбирает всех детей <PLANET> контекстного узла, имеющих оба атрибута COLOR и UNITS;
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "XSLT"
Книги похожие на "XSLT" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Стивен Холзнер - XSLT"
Отзывы читателей о книге "XSLT", комментарии и мнения людей о произведении.