XML Tutorial/XPath/proceding sibling
Содержание
First subject preceding Java is
<source lang="xml">
File: Data.xml <?xml version = "1.0"?> <product>
<books> <book> Getting Started with Microsoft Visual C++ </book> <book>Java</book> </books>
</product> File: Transform.xslt <?xml version = "1.0"?> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/product"> First subject preceding "Java" is <xsl:value-of select="//subject[. = "Java" ]/preceding-sibling::subject[ 1 ]" /> </xsl:template>
</xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?>
First subject preceding "Java" is</source>
if test="not(preceding-sibling::address[zip=$lastZip])"
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <addressbook>
<address> <name> <title>Mr.</title> <first-name>Jack</first-name> <last-name>Smith</last-name> </name> <street>1234 Main Street</street> <city>New York</city> <state>WI</state> <zip>48392</zip> </address>
</addressbook>
File: Transform.xslt <?xml version="1.0"?> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="no"/> <xsl:template match="/"> <xsl:for-each select="addressbook/address"> <xsl:sort select="zip"/> <xsl:variable name="lastZip" select="zip"/> <xsl:if test="not(preceding-sibling::address[zip=$lastZip])"> <xsl:text>Zip code </xsl:text> <xsl:value-of select="zip"/> <xsl:text>: </xsl:text> <xsl:for-each select="/addressbook/address[zip=$lastZip]"> <xsl:sort select="name/last-name"/> <xsl:sort select="name/first-name"/> <xsl:if test="name/title"> <xsl:value-of select="name/title"/> <xsl:text> </xsl:text> </xsl:if> <xsl:value-of select="name/first-name"/> <xsl:text> </xsl:text> <xsl:value-of select="name/last-name"/> <xsl:text> </xsl:text> <xsl:value-of select="street"/> <xsl:text> </xsl:text> </xsl:for-each> </xsl:if> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output: Zip code 48392: Mr. Jack Smith 1234 Main Street</source>
if test="position() = 1 or zip!=preceding-sibling::address[1]/zip"
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <addressbook>
<address> <name> <title>Mr.</title> <first-name>Jack</first-name> <last-name>Smith</last-name> </name> <street>1234 Main Street</street> <city>New York</city> <state>WI</state> <zip>48392</zip> </address>
</addressbook>
File: Transform.xslt <?xml version="1.0"?> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="no"/> <xsl:template match="/"> <xsl:for-each select="addressbook/address"> <xsl:sort select="zip"/> <xsl:if test="position() = 1 or zip!=preceding-sibling::address[1]/zip"> <xsl:text> Zip code </xsl:text> <xsl:value-of select="zip"/> <xsl:text> (</xsl:text> <xsl:value-of select="city"/> <xsl:text>, </xsl:text> <xsl:value-of select="state"/> <xsl:text>): </xsl:text> </xsl:if> <xsl:if test="name/title"> <xsl:value-of select="name/title"/> <xsl:text> </xsl:text> </xsl:if> <xsl:value-of select="name/first-name"/> <xsl:text> </xsl:text> <xsl:value-of select="name/last-name"/> <xsl:text> </xsl:text> <xsl:value-of select="street"/> <xsl:text> </xsl:text> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output:
Zip code 48392 (New York, WI): Mr. Jack Smith 1234 Main Street</source>
<source lang="xml">
File: Data.xml <?xml version="1.0" encoding="utf-8"?>
<AAA id="a1" pos="start"> <BBB id="b1"/> <BBB id="b2"/> </AAA> <AAA id="a2"> <BBB id="b3"/> <BBB id="b4"/> <CCC id="c1"> <CCC id="c2"/> </CCC> <BBB id="b5"> <CCC id="c3"/> </BBB> </AAA>
File: Transform.xslt <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">
Axis: preceding-sibling | |
---|---|
Element</th>
<td>Node-set</th> |
Axis: preceding-sibling | |
---|---|
Element</th><td>Node-set</th> |