http://wbex.ru/index.php?title=XML_Tutorial/XPath/axis&feed=atom&action=history
XML Tutorial/XPath/axis - История изменений
2024-03-28T10:56:49Z
История изменений этой страницы в вики
MediaWiki 1.30.0
http://wbex.ru/index.php?title=XML_Tutorial/XPath/axis&diff=10737&oldid=prev
Admin: 1 версия
2010-05-26T08:26:51Z
<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/XPath/axis&diff=10736&oldid=prev
в 18:22, 25 мая 2010
2010-05-25T18:22:32Z
<p></p>
<p><b>Новая страница</b></p><div>== All axes were used in this example==<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 />
<doc><br />
<ancprec><br />
<paragraph><br />
Preceeding Ancestor.<br />
<br /><br />
</paragraph><br />
</ancprec><br />
</doc><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:template match="/"><br />
<xsl:apply-templates select="//me" /><br />
</xsl:template><br />
<xsl:template match="br"><br />
<br /><br />
</xsl:template><br />
<xsl:template match="me" priority="10"><br />
<html><br />
<head><br />
<title><br />
<xsl:text>Document</xsl:text><br />
</title><br />
</head><br />
<body><br />
<H2>Following Axis</H2><br />
<xsl:apply-templates select="following::*/paragraph" /><br />
<H2>Descendant or Self Axis</H2><br />
<xsl:apply-templates select="descendant-or-self::*/paragraph" /><br />
<H2>Descendant Axis</H2><br />
<xsl:apply-templates select="descendant::*/paragraph" /><br />
<H2>Self Axis</H2><br />
<xsl:apply-templates select="self::*/paragraph" /><br />
<H2>Child Axis</H2><br />
<xsl:apply-templates select="child::*/paragraph" /><br />
<H2>Following Axis</H2><br />
<xsl:apply-templates select="following::*/paragraph" /><br />
<H2>Following Sibling Axis</H2><br />
<xsl:apply-templates select="following-sibling::*" /><br />
<H2>Attribute Axis</H2><br />
<xsl:apply-templates select="attribute::*" /><br />
<H2>Parent Axis</H2><br />
<xsl:apply-templates select="parent::*/paragraph" /><br />
<H2>Ancestor or Self Axis</H2><br />
<xsl:apply-templates select="ancestor-or-self::*/paragraph" /><br />
<H2>Ancestor Axis</H2><br />
<xsl:apply-templates select="ancestor::*/paragraph" /><br />
<H2>Preceding Sibling Axis</H2><br />
<xsl:apply-templates select="preceding-sibling::*/paragraph" /><br />
</body><br />
</html><br />
</xsl:template><br />
</xsl:stylesheet></source><br />
<br />
<br />
<br />
== Check current element value, the output==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version = "1.0"?><br />
<books><br />
<book> <br />
<title>Java How to Program</title><br />
<translation edition = "1">Spanish</translation><br />
<translation edition = "1">Chinese</translation><br />
<translation edition = "1">Japanese</translation><br />
<translation edition = "2">French</translation><br />
<translation edition = "2">Japanese</translation><br />
</book><br />
<book> <br />
<title>C++ How to Program</title><br />
<translation edition = "1">Korean</translation><br />
<translation edition = "2">French</translation><br />
<translation edition = "2">Spanish</translation><br />
<translation edition = "3">Italian</translation><br />
<translation edition = "3">Japanese</translation><br />
</book><br />
</books> <br />
<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="/"><br />
<html><br />
<body><br />
<ul><br />
<xsl:for-each select="books/book/translation"><br />
<xsl:if test=". = "Japanese""><br />
<li><br />
<strong><br />
<xsl:value-of select="../title" /><br />
</strong><br />
- Edition:<br />
<strong><br />
<xsl:value-of select="@edition" /><br />
</strong><br />
</li><br />
</xsl:if><br />
</xsl:for-each><br />
</ul><br />
</body><br />
</html><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<html><br />
<body><br />
<ul><br />
<li><strong>Java How to Program</strong><br />
- Edition:<br />
<strong>1</strong></li><br />
<li><strong>Java How to Program</strong><br />
- Edition:<br />
<strong>2</strong></li><br />
<li><strong>C++ How to Program</strong><br />
- Edition:<br />
<strong>3</strong></li><br />
</ul><br />
</body><br />
</html></source><br />
<br />
<br />
<br />
== Decendents of==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version = "1.0"?><br />
<product><br />
<books><br />
<book><br />
Getting Started with Microsoft Visual C++ <br />
</book><br />
<book>C How to Program</book><br />
</books><br />
</product><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 = "/product"><br />
Decendents of <br />
<xsl:apply-templates select = "books//node()"/><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><br />
Decendents of <br />
<br />
<br />
Getting Started with Microsoft Visual C++ <br />
<br />
Getting Started with Microsoft Visual C++ <br />
<br />
C How to ProgramC How to Program</source><br />
<br />
<br />
<br />
== Element level matching==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0"?><br />
<CATS><br />
<SIAMESE><br />
<NAME>A</NAME><br />
<NAME>B</NAME><br />
</SIAMESE><br />
</CATS><br />
File: Transform.xslt<br />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
version="1.0"><br />
<xsl:output method="text" /><br />
<xsl:template match="/"><br />
<xsl:apply-templates select="CATS/SIAMESE/NAME" /><br />
</xsl:template><br />
<xsl:template match="CATS/SIAMESE/NAME"><br />
<xsl:value-of select="." /><br />
<xsl:text> </xsl:text><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
A B</source><br />
<br />
<br />
<br />
== * for level==<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 />
<employee eid="1" dept="programming"><br />
<contact type="spouse"><br />
<name><br />
<firstName>Jill</firstName><br />
<middleName int="A">Alicia</middleName><br />
<lastName>Smith</lastName><br />
</name><br />
<address><br />
<street>1 Drive</street><br />
<city>Vancouver</city><br />
<state>BC</state><br />
<zipcode>80210</zipcode><br />
</address><br />
<phone><br />
<tel type="wk">303-4668903</tel><br />
<tel type="hm">222-222222</tel><br />
<fax>303-4667357</fax><br />
</phone><br />
<email>j@hotmail.ru</email><br />
</contact><br />
</employee><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:param name="doc"<br />
select="employees/employee[1]/contact/@addInfo" /><br />
<xsl:variable name="contacts" select="document($doc)" /><br />
<xsl:template match="/"><br />
<html><br />
<head><br />
<title>Email Listing</title><br />
</head><br />
<body><br />
Your search brought the following results:<br />
<xsl:value-of select="$contacts/*/firstName" /><br />
<xsl:text> </xsl:text><br />
<xsl:copy-of select="$contacts/*/lastName/text()" /><br />
</body><br />
</html><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<html><br />
<head><br />
<title>Email Listing</title><br />
</head><br />
<body><br />
Your search brought the following results:<br />
</body><br />
</html></source><br />
<br />
<br />
<br />
== If an element has a child==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" standalone="yes"?><br />
<poem author="jm" year="2008"><br />
<verse>line 1</verse><br />
<verse>line 2</verse><br />
<verse>line 3</verse><br />
<verse>line 4</verse><br />
</poem><br />
File: Transform.xslt<br />
<?xml version="1.0" standalone="yes"?><br />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
version="1.0"><br />
<xsl:output method="text" /><br />
<xsl:template match="poem"><br />
<xsl:if test="verse"><br />
The poem has at least one verse child element.<br />
</xsl:if><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<br />
The poem has at least one verse child element.</source><br />
<br />
<br />
<br />
== If an element has more than 3 child elements==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" standalone="yes"?><br />
<poem author="jm" year="1667"><br />
<verse>line 1</verse><br />
<verse>line 2</verse><br />
<verse>line 3</verse><br />
<verse>line 4</verse><br />
</poem><br />
File: Transform.xslt<br />
<?xml version="1.0" standalone="yes"?><br />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
version="1.0"><br />
<xsl:output method="text" /><br />
<xsl:template match="poem"><br />
<xsl:if test="count(verse) > 3"><br />
The poem has more than 3 verse child elements.<br />
</xsl:if><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<br />
The poem has more than 3 verse child elements.</source><br />
<br />
<br />
<br />
== If element has value==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0"?><br />
<addressbook><br />
<address><br />
<name><br />
<title>Mr.</title><br />
<first-name>Bond</first-name><br />
<last-name>James</last-name><br />
</name><br />
<street>1234 Main Street</street><br />
<city>LA</city><br />
<state>WI</state><br />
<zip>48392</zip><br />
</address><br />
</addressbook><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="/"><br />
<xsl:apply-templates select="addressbook/address"><br />
<xsl:sort select="name/last-name"/><br />
<xsl:sort select="name/first-name"/><br />
</xsl:apply-templates><br />
</xsl:template><br />
<xsl:template match="address"><br />
<xsl:if test="name/title"><br />
<xsl:value-of select="name/title"/><br />
<xsl:text> </xsl:text><br />
</xsl:if><br />
<xsl:value-of select="name/first-name"/><br />
<xsl:text> </xsl:text><br />
<xsl:value-of select="name/last-name"/><br />
<xsl:text>&#xA;</xsl:text><br />
<xsl:value-of select="street"/><br />
<xsl:text>&#xA;</xsl:text><br />
<xsl:value-of select="city"/><br />
<xsl:text>, </xsl:text><br />
<xsl:value-of select="state"/><br />
<xsl:text> </xsl:text><br />
<xsl:value-of select="zip"/><br />
<xsl:text>&#xA;</xsl:text><br />
<xsl:text>&#xA;</xsl:text><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
Mr. Bond James<br />
1234 Main Street<br />
LA, WI 48392</source><br />
<br />
<br />
<br />
== If one element has at least one child element==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0" standalone="yes"?><br />
<poem author="jm" year="2008"><br />
<verse>line 1</verse><br />
<verse>line 2</verse><br />
<verse>line 3</verse><br />
<verse>line 4</verse><br />
</poem><br />
File: Transform.xslt<br />
<?xml version="1.0" standalone="yes"?><br />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
version="1.0"><br />
<xsl:output method="text" /><br />
<xsl:template match="poem"><br />
<xsl:if test="shipDate"><br />
The poem has at least one shipDate child element.<br />
</xsl:if><br />
</xsl:template><br />
</xsl:stylesheet></source><br />
<br />
<br />
<br />
== match element by name==<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 />
<SeasonStats><br />
<Player id="p0001"><br />
<Name>Jordon</Name><br />
</Player><br />
</SeasonStats><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="iso-8859-1" ?><br />
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"<br />
version="1.0"><br />
<xsl:output method="text" /><br />
<xsl:template match="/"><br />
<xsl:apply-templates /><br />
</xsl:template><br />
<xsl:template match="Player"><br />
<xsl:apply-templates select="Name" /><br />
</xsl:template><br />
<xsl:template match="Name"><br />
<xsl:value-of select="." /><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
Jordon</source><br />
<br />
<br />
<br />
== match="@*|node()"==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<colors><br />
<color>red</color><br />
<color>yellow</color><br />
<color>blue</color><br />
<!-- <br />
Next color element has whitespace content. <br />
--><br />
<color></color><br />
</colors><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="@*|node()"><br />
<xsl:copy><br />
<xsl:apply-templates select="@*|node()" /><br />
</xsl:copy><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<colors><br />
<color>red</color><br />
<color>yellow</color><br />
<color>blue</color><br />
<!-- <br />
Next color element has whitespace content. <br />
--><br />
<color/><br />
</colors></source><br />
<br />
<br />
<br />
== Math calculation with current value==<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="operand"><br />
<xsl:value-of select="." /><br />
<xsl:text> + 25 = </xsl:text><br />
<xsl:value-of select=". + 25" /><br />
<xsl:text>&#10;</xsl:text><br />
<xsl:value-of select="." /><br />
<xsl:text> * 25 = </xsl:text><br />
<xsl:value-of select=". * 25" /><br />
<xsl:text>&#10;</xsl:text><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<br />
12 + 25 = 37<br />
12 * 25 = 300<br />
23 + 25 = 48<br />
23 * 25 = 575<br />
45 + 25 = 70<br />
45 * 25 = 1125<br />
56 + 25 = 81<br />
56 * 25 = 1400<br />
75 + 25 = 100<br />
75 * 25 = 1875</source><br />
<br />
<br />
<br />
== Modeling XML Documents with Axis==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="UTF-8"?> <br />
<Book> <br />
<Chapter>Some content</Chapter> <br />
<Appendix>Some appendix content.</Appendix> <br />
</Book> <br />
When giving street directions, you have four basic directions: north, south, east, and west. <br />
In XPath, a direction is called an axis. <br />
In XPath, there are 13 directions called Axes. <br />
child axis <br />
attribute axis <br />
ancestor axis <br />
ancestor-or-self axis <br />
descendant axis <br />
descendant-or-self axis <br />
following axis <br />
following-sibling axis <br />
namespace axis (not used in XQuery, and deprecated in XPath 2.0) <br />
parent axis <br />
preceding axis <br />
preceding-sibling axis <br />
self axis <br />
In XPath, you might write something like this: /Book/Chapter[@number=2] <br />
A relative location path could be written as follows: Chapter[@number=2]</source><br />
<br />
<br />
<br />
== select dot for value-of==<br />
<br />
<br />
<br />
<br />
<!-- start source code --><br />
<br />
<source lang="xml"><br />
File: Data.xml<br />
<?xml version="1.0"?><br />
<root ref="rootref" name="blue"><br />
<node1><br />
<node2><br />
<node3>value</node3><br />
</node2> <br />
</node1><br />
</root><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="/"><br />
<xsl:apply-templates select="root/node1/node2/node3" /><br />
</xsl:template><br />
<xsl:template match="node3"><br />
<xsl:value-of select="." /><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?>value</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"?><br />
<mammals locale="North America"><br />
<mammal junk="yyy">A</mammal><br />
<mammal>B</mammal><br />
<mammal>C</mammal><br />
<mammal>D</mammal><br />
<mammal>E</mammal><br />
<mammal>F</mammal><br />
<mammal>G</mammal><br />
</mammals><br />
<br />
File: Transform.xslt<br />
<?xml version="1.0" encoding="US-ASCII"?><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="mammals"><br />
<north.american><br />
<mammal><br />
<cat><br />
<xsl:apply-templates select="mammal[6]" /><br />
</cat><br />
</mammal><br />
</north.american><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<north.american><br />
<mammal><br />
<cat>F</cat><br />
</mammal><br />
</north.american></source><br />
<br />
<br />
<br />
== selects only elements which occurs first in each level==<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 />
<data><br />
<contact><br />
<name>A</name><br />
<street>B</street><br />
<number>7</number><br />
<tel><br />
<home>1111111</home><br />
<work>7777777</work><br />
</tel><br />
</contact><br />
<contact><br />
<name>C</name><br />
<street>D</street><br />
<number>75</number><br />
<tel><br />
<home>21111111</home><br />
<work>333333333</work><br />
</tel><br />
</contact><br />
</data><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:template match="/"><br />
<TABLE><br />
<xsl:for-each select="//*[1]"><br />
<xsl:call-template name="generalTemplate"/><br />
</xsl:for-each><br />
</TABLE><br />
</xsl:template><br />
<xsl:template name="generalTemplate"><br />
<TR><br />
<TD><br />
<xsl:value-of select="name(.)"/><br />
</TD><br />
</TR><br />
</xsl:template><br />
</xsl:stylesheet><br />
Output:<br />
<?xml version="1.0" encoding="UTF-8"?><TABLE><TR><TD>data</TD></TR><TR><TD>contact</TD></TR><TR><TD>name</TD></TR><TR><TD>home</TD></TR><TR><TD>name</TD></TR><TR><TD>home</TD></TR></TABLE></source></div>