http://wbex.ru/index.php?title=XML_Tutorial/XSLT_stylesheet/select&feed=atom&action=history
XML Tutorial/XSLT stylesheet/select - История изменений
2024-03-29T14:55:41Z
История изменений этой страницы в вики
MediaWiki 1.30.0
http://wbex.ru/index.php?title=XML_Tutorial/XSLT_stylesheet/select&diff=10845&oldid=prev
Admin: 1 версия
2010-05-26T08:26:58Z
<p>1 версия</p>
<table class="diff diff-contentalign-left" data-mw="interface">
<tr style="vertical-align: top;" lang="ru">
<td colspan="1" style="background-color: white; color:black; text-align: center;">← Предыдущая</td>
<td colspan="1" style="background-color: white; color:black; text-align: center;">Версия 08:26, 26 мая 2010</td>
</tr><tr><td colspan="2" style="text-align: center;" lang="ru"><div class="mw-diff-empty">(нет различий)</div>
</td></tr></table>
Admin
http://wbex.ru/index.php?title=XML_Tutorial/XSLT_stylesheet/select&diff=10844&oldid=prev
в 18:22, 25 мая 2010
2010-05-25T18:22:32Z
<p></p>
<p><b>Новая страница</b></p><div>== Get value from an element with value-of and select==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml <br />
<?xml version="1.0" encoding="iso-8859-1"?><br />
<?xml-stylesheet type="text/xsl" href="Transform.xslt"?><br />
<greeting>Hello, world!</greeting><br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="iso-8859-1"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:template match="/"><br />
<html><br />
<head><br />
<title>Today"s greeting</title><br />
</head><br />
<body><br />
<paragraph><br />
<xsl:value-of select="greeting" /><br />
</p><br />
</body><br />
</html><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<html><br />
<head><br />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><br />
<title>Today"s greeting</title><br />
</head><br />
<body><br />
<paragraph>Hello, world!</p><br />
</body><br />
</html></source><br />
<br />
<br />
<br />
== Match a certain element==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<poem year="1667" type="epic"><br />
<verse>line 3</verse><br />
<verse>line 4</verse><br />
</poem><br />
<br />
File: Transform.xslt<br />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
version="1.0"><br />
<xsl:template match="poem"><br />
<ode><br />
<author>Jack</author><br />
<year><br />
<xsl:value-of select="@year" /><br />
</year><br />
<xsl:apply-templates /><br />
</ode><br />
</xsl:template><br />
<xsl:template match="verse"><br />
<verse><br />
<xsl:apply-templates /><br />
</verse><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><ode><author>Jack</author><year>1667</year><br />
<verse>line 3</verse><br />
<verse>line 4</verse><br />
</ode></source><br />
<br />
<br />
<br />
== match parent and select children==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<wine grape="Las"><br />
<winery>Moti</winery><br />
<year>1998</year><br />
<prices><br />
<list>13.99</list><br />
<discounted>11.99</discounted><br />
<case>143.50</case><br />
</prices><br />
</wine><br />
File: Transform.xslt<br />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
version="1.0"><br />
<xsl:output method="xml" omit-xml-declaration="yes" indent="no" /><br />
<xsl:template match="wine"><br />
<xsl:value-of select="price" /><br />
</xsl:template><br />
<br />
</xsl:stylesheet></source><br />
<br />
<br />
<br />
== Match parent and select grand-children==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<br />
<wine grape="Las"><br />
<winery>Moti</winery><br />
<year>1998</year><br />
<prices><br />
<list>13.99</list><br />
<discounted>11.99</discounted><br />
<case>143.50</case><br />
</prices><br />
</wine><br />
File: Transform.xslt<br />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
version="1.0"><br />
<xsl:output method="xml" omit-xml-declaration="yes" indent="no" /><br />
<xsl:template match="wine"><br />
<xsl:value-of select="prices/retail" /><br />
</xsl:template><br />
<br />
</xsl:stylesheet></source><br />
<br />
<br />
<br />
== select attribute==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<poem year="1667" type="epic"><br />
<verse>line 3</verse><br />
<verse>line 4</verse><br />
</poem><br />
File: Transform.xslt<br />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
version="1.0"><br />
<xsl:template match="poem"><br />
<xsl:element name="ode"><br />
<xsl:element name="author">Jack</xsl:element><br />
<xsl:element name="year"><br />
<xsl:value-of select="@year" /><br />
</xsl:element><br />
<xsl:apply-templates /><br />
</xsl:element><br />
</xsl:template><br />
<xsl:template match="verse"><br />
<verse><br />
<xsl:apply-templates /><br />
</verse><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><ode><author>Jack</author><year>1667</year><br />
<verse>line 3</verse><br />
<verse>line 4</verse><br />
</ode></source><br />
<br />
<br />
<br />
== select=count(document(other.xml)/eu/other/state)==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<eu><br />
<member><br />
<state>Austria</state><br />
<state founding="yes">Belgium</state><br />
</member><br />
<candidate><br />
<state>Poland</state><br />
<state>Romania</state><br />
<state>Slovakia</state><br />
<state>Slovenia</state><br />
<state>Turkey</state><br />
</candidate><br />
</eu><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="xml" indent="yes" /><br />
<xsl:template match="eu"><br />
<xsl:copy><br />
<xsl:comment><br />
<xsl:text>Member states: </xsl:text><br />
<xsl:value-of select="count(member/state)" /><br />
</xsl:comment><br />
<xsl:copy-of select="member" /><br />
<xsl:comment><br />
<xsl:text>Candidate states: </xsl:text><br />
<xsl:value-of select="count(candidate/state)" /><br />
</xsl:comment><br />
<xsl:copy-of select="candidate" /><br />
<xsl:comment><br />
<xsl:text>Other states: </xsl:text><br />
<xsl:value-of<br />
select="count(document("other.xml")/eu/other/state)" /><br />
</xsl:comment><br />
<xsl:copy-of select="document("other.xml")/eu/other" /><br />
</xsl:copy><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<eu><!--Member states: 2--><member><br />
<state>Austria</state><br />
<state founding="yes">Belgium</state><br />
</member><br />
<!--Candidate states: 5--><candidate><br />
<state>Poland</state><br />
<state>Romania</state><br />
<state>Slovakia</state><br />
<state>Slovenia</state><br />
<state>Turkey</state><br />
</candidate><br />
<!--Other states: 0--></eu></source><br />
<br />
<br />
<br />
== select element and attribute==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<employee hireDate="09/01/1998"><br />
<last>Smith</last><br />
<first>Joe</first><br />
<salary>95000</salary><br />
</employee><br />
<br />
File: Transform.xslt<br />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
version="1.0"><br />
<xsl:output method="xml" omit-xml-declaration="yes" /><br />
<xsl:template match="employee"><br />
<xsl:apply-templates select="@hireDate" /><!-- note space --><br />
<xsl:apply-templates select="first" /><br />
<xsl:apply-templates select="last" /><br />
</xsl:template><br />
<br />
</xsl:stylesheet><br />
Output:<br />
09/01/1998JoeSmith</source><br />
<br />
<br />
<br />
== select element by attribute value==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<greeting><br />
<welcome xml:lang="en" id="001">Welcome</welcome><br />
<welcome xml:lang="fr" id="002">Bienvenue</welcome><br />
<welcome xml:lang="es" id="003">Bienvenido</welcome><br />
<welcome xml:lang="de" id="004">Willkommen</welcome><br />
</greeting><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="text" /><br />
<xsl:template match="greeting"><br />
<xsl:apply-templates select="welcome[lang("de")]" /><br />
</xsl:template><br />
<xsl:template match="welcome[lang("de")]"><br />
<xsl:text>German: </xsl:text><br />
<xsl:value-of select="." /><br />
<xsl:text> (ID: </xsl:text><br />
<xsl:value-of select="@id" /><br />
<xsl:text>)</xsl:text><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
German: Willkommen (ID: 004)</source><br />
<br />
<br />
<br />
== select element by index==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<eu><br />
<member><br />
<state>Austria</state><br />
<state founding="yes">Belgium</state><br />
</member><br />
<candidate><br />
<state>Bulgaria</state><br />
<state>Cyprus</state><br />
<state>Czech Republic</state><br />
</candidate><br />
</eu><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="xml" /><br />
<xsl:template match="eu"><br />
<xsl:apply-templates select="member" /><br />
</xsl:template><br />
<xsl:template match="member"><br />
<xsl:apply-templates select="state[2]" /><br />
</xsl:template><br />
<xsl:template match="state"><br />
<xsl:copy /><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><state/></source><br />
<br />
<br />
<br />
== Select element out==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0"?><br />
<?xml-stylesheet type="application/xml" href="people.xsl"?><br />
<people><br />
<person born="2008" died="2008" id="1"><br />
<name><br />
<first_name>A</first_name><br />
<last_name>B</last_name><br />
</name><br />
</person><br />
<person born="2007" died="2007" id="2"><br />
<name><br />
<first_name>D</first_name><br />
<middle_initial>E</middle_initial><br />
<last_name>F</last_name><br />
</name><br />
</person><br />
</people><br />
File: Transform.xslt<br />
<?xml version="1.0"?> <br />
<xsl:stylesheet version="1.0" <br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:template match="people"><br />
<xsl:apply-templates select="person"/><br />
</xsl:template><br />
<xsl:template match="person"><br />
<xsl:value-of select="name"/><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><br />
A<br />
B<br />
<br />
D<br />
E<br />
F</source><br />
<br />
<br />
<br />
== Selecting elements based on values of other ones.==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" encoding="utf-8"?><br />
<DOCUMENT><br />
<TAG1>Hello</TAG1><br />
<TAG2>Hello</TAG2><br />
<TAG3>World</TAG3><br />
<TAG4>Europe<TAG5>World</TAG5><br />
</TAG4><br />
</DOCUMENT><br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="utf-8"?><br />
<xsl:stylesheet<br />
version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="html"/><br />
<xsl:template match="/"><br />
<xsl:if test="//DOCUMENT[TAG1 = TAG2]"><br />
<xsl:value-of select="//DOCUMENT/TAG1"/><br />
</xsl:if><br />
<BR/><br />
<xsl:if test="//DOCUMENT[TAG3 = TAG4/TAG5]"><br />
<xsl:value-of select="//TAG4/text()"/><br />
</xsl:if><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
Hello<BR>Europe</source><br />
<br />
<br />
<br />
== select="@*|node()"==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml-stylesheet href="Transform.xslt" type="text/xsl"?><br />
<state member="true" xmlns="http://www.wbex.ru">Belgium</state><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="xml" indent="yes" encoding="US-ASCII" /><br />
<xsl:template match="@*|node()"><br />
<xsl:copy><br />
<xsl:apply-templates select="@*|node()" /><br />
</xsl:copy><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="US-ASCII"?><br />
<?xml-stylesheet?><state xmlns="http://www.wbex.ru" member="true">Belgium</state></source><br />
<br />
<br />
<br />
== select="operand[(. < 50) and (. > 30)]"==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<math><br />
<operand>12</operand><br />
<operand>23</operand><br />
<operand>45</operand><br />
<operand>56</operand><br />
<operand>75</operand><br />
</math><br />
File: Transform.xslt<br />
<?xml version="1.0"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="text" /><br />
<xsl:template match="math"><br />
<xsl:apply-templates<br />
select="operand[(. &lt; 50) and (. &gt; 30)]" /><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
45</source><br />
<br />
<br />
<br />
== select="state[not(@founding)]"==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<eu><br />
<member><br />
<state>Austria</state><br />
<state founding="yes">Belgium</state><br />
</member><br />
<candidate><br />
<state>Bulgaria</state><br />
<state>Cyprus</state><br />
<state>Czech Republic</state><br />
</candidate><br />
</eu><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="xml" indent="yes" /><br />
<xsl:attribute-set name="new"><br />
<xsl:attribute name="founding">no</xsl:attribute><br />
</xsl:attribute-set><br />
<xsl:template match="eu"><br />
<xsl:apply-templates select="member" /><br />
</xsl:template><br />
<xsl:template match="member"><br />
<eu><br />
<members><br />
<xsl:apply-templates select="state[not(@founding)]" /><br />
</members><br />
</eu><br />
</xsl:template><br />
<xsl:template match="state"><br />
<xsl:copy use-attribute-sets="new"><br />
<xsl:apply-templates /><br />
</xsl:copy><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<eu><br />
<members><br />
<state founding="no">Austria</state><br />
</members><br />
</eu></source><br />
<br />
<br />
<br />
== select value from attribute==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<eu><br />
<member><br />
<state>Austria</state><br />
<state founding="yes">Belgium</state><br />
</member><br />
<candidate><br />
<state>Bulgaria</state><br />
<state>Cyprus</state><br />
<state>Turkey</state><br />
</candidate><br />
</eu><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<xsl:stylesheet version="1.0"<br />
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><br />
<xsl:output method="xml" indent="yes" /><br />
<xsl:template match="eu"><br />
<xsl:apply-templates select="member" /><br />
</xsl:template><br />
<xsl:template match="member"><br />
<eu-members><br />
<xsl:apply-templates select="state[@founding]" /><br />
</eu-members><br />
</xsl:template><br />
<xsl:template match="state"><br />
<xsl:copy><br />
<xsl:apply-templates /><br />
</xsl:copy><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<eu-members><br />
<state>Belgium</state><br />
</eu-members></source></div>