XPath中相对路径和绝对路径

XPath中相对路径和绝对路径
相对路径:即相对于上下文节点的路径
绝对路径:即从根目录开始的完整的路径
下面的xml和xslt写得相当好,初学者看一下
<?xml version = "1.0"?>
<?xml-stylesheet type="text/xsl" href="catalog_ui.xsl"?>

<Catalog>
 <Publisher isbn = "186100">
  <CorporateName>Wrox Press Ltd</CorporateName>
  <Address headquarters = "yes">
   <Street>Arden House</Street>
   <Street>1102 Warwick Road, Acocks Green</Street>
   <City>Birmingham</City>
   <Country>UK</Country>
   <PostalCode>B27 6BH</PostalCode>
  </Address>
  <Address headquarters = "no">
   <Street>Suite 520</Street>
   <Street>29 S. Lasalle Street</Street>
   <City>Chicago</City>
   <PoliticalDivision>IL</PoliticalDivision>
   <Country>USA</Country>
   <PostalCode>60603</PostalCode>
  </Address>
  <Imprints>
   <Imprint shortImprintName = "XML">XML and Scripting</Imprint>
   <Imprint shortImprintName ="Linux">GNU/Linux</Imprint>
   <Imprint shortImprintName  ="Java">Java</Imprint>
   <Imprint shortImprintName ="ASP">Active Server Pages</Imprint>
  </Imprints>
  <Author authorCiteID = "smohr">
   <FirstName>Stephen</FirstName>
   <LastName>Mohr</LastName>
   <Biographical>Stephen Mohr is a senior systems architect...</Biographical>
  </Author>
  <Author authorCiteID = "nozu">
   <FirstName>Nikola</FirstName>
   <LastName>Ozu</LastName>
   <Biographical>Nikola Ozu is a systems architect and consultant...</Biographical>
  </Author> 
  <Author authorCiteID = "jond">
   <FirstName>Jon</FirstName>
   <LastName>Duckett</LastName>
   <Biographical>The brains behind the Dr Evil organization, Jon is...</Biographical>
  </Author>
  <Author authorCiteID = "mbirbeck">
   <FirstName>Mark</FirstName>
   <LastName>Birbeck</LastName>
   <Biographical>Mark Birbeck has been a professional programmer for...</Biographical>
  </Author> 
  <Author authorCiteID = "mkay">
   <FirstName>Michael</FirstName>
   <LastName>Kay</LastName>
   <Biographical>Michael Kay has spent most of ...</Biographical>
  </Author> 
  <Author authorCiteID = "scottwoo">
   <FirstName>Scott</FirstName>
   <LastName>Woodgate</LastName>
   <Biographical>Scott Woodgate, a Microsoft Certified Solution Developer, ...</Biographical>
  </Author>       
 </Publisher>
 <Thread threadID = "coreXML">Core XML</Thread>
 <Thread threadID ="proXML">Advanced Topics in XML</Thread>
 <Thread threadID ="msXML">Microsoft XML Products</Thread>
 <Book ISBN = "1861005059" level = "pro" pubdate = "06-01-2001" pageCount = "800" authors = "smohr mbirbeck nozu jond" threads = "coreXML proXML" imprint = "XML">
  <Title>Professional XML, 2nd Edition</Title>
  <Abstract>An update to the wildly successful first edition, Pro XML covers the full ...</Abstract>
  <RecSubjCategories>
   <Category>Internet</Category>
   <Category>Internet Programming</Category>
   <Category>XML</Category>
  </RecSubjCategories>
  <Price currency = "USD">49.99</Price>
 </Book>
 <Book ISBN = "1861003129" level = "pro" pubdate = "07-2000" pageCount = "780" authors = "mkay" threads = "proXML" imprint = "XML">
  <Title>XSLT Programmer's Reference</Title>
  <Abstract>The definitive guide to XSLT and XSLT programming ...</Abstract>
  <RecSubjCategories>
   <Category>Internet</Category>
   <Category>XML</Category>
   <Category>XSL</Category>
  </RecSubjCategories>
  <Price currency = "USD">34.99</Price>
 </Book>
 <Book ISBN = "1861003293" level = "pro" pubdate = "12-2000" pageCount = "700" authors = "smohr scottwoo" threads = "proXML msXML" imprint = "XML">
  <Title>Professional BizTalk</Title>
  <Abstract>The first comprehensive guide to using and programming Microsoft BizTalk Server ...</Abstract>
  <RecSubjCategories>
   <Category>XML</Category>
   <Category>E-Commerce</Category>
  </RecSubjCategories>
  <Price currency = "USD">49.99</Price>
 </Book>   
</Catalog>

 

 


/*--------------*/
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" />

<xsl:template match="/">
   <xsl:element name="HTML">
      <xsl:element name="HEAD">
         <xsl:element name="TITLE">Book Catalog</xsl:element>
      </xsl:element>
      <xsl:element name="BODY">
         <xsl:apply-templates select="/Catalog/Book"/>
      </xsl:element>
   </xsl:element>
</xsl:template>

<xsl:template match="Book">
   <xsl:apply-templates select="Title"/>
   <xsl:variable name="isbn" select="@ISBN"/>
   <xsl:element name="DIV">
      <xsl:attribute name="style">font-family:Verdana;font-size:10pt;color:black;font-weight:bolder</xsl:attribute>
      <xsl:value-of select="/Catalog/Publisher[contains($isbn,@isbn)]/CorporateName"/>
   </xsl:element>
   <xsl:variable name="by" select="@authors"/>
   <xsl:call-template name="fetch-authors">
      <xsl:with-param name="authors" select="/Catalog/Publisher/Author[contains($by,@authorCiteID)]"/>
   </xsl:call-template>
  
   <xsl:element name="DIV">
      <xsl:attribute name="style">color:black;font-size:10pt;font-family:Verdana</xsl:attribute>
      <xsl:text>Price: </xsl:text><xsl:value-of select="Price"/><xsl:text> </xsl:text><xsl:value-of select="Price/@currency"/>
   </xsl:element>
  
   <xsl:apply-templates select="*[name() != 'Title']"/>
   <xsl:element name="P"/>
</xsl:template>

<xsl:template match="Title">
   <xsl:element name="DIV">
      <xsl:attribute name="style">background:teal;color:black;font-family:Verdana;font-size:14pt;font-weight:bolder</xsl:attribute>
      <xsl:value-of select="."/>
   </xsl:element>
</xsl:template>

<xsl:template match="Abstract">
   <xsl:element name="P"/>
   <xsl:element name="DIV">
      <xsl:attribute name="style">font-family:Verdana;font-size:12pt</xsl:attribute>
      <xsl:value-of select="."/>
   </xsl:element>
</xsl:template>

<xsl:template match="RecSubjCategories">
   <xsl:element name="P"/>
   <xsl:for-each select="Category">
      <xsl:element name="SPAN">
         <xsl:attribute name="style">font-family:verdana;font-size:8pt;background:black;color:white;width:3.5cm;text-align:center</xsl:attribute>
         <xsl:value-of select="."/>
      </xsl:element>
      <xsl:text> </xsl:text>
   </xsl:for-each>
</xsl:template>

<xsl:template match="text()"/>

<xsl:template name="fetch-authors">
   <xsl:param name="authors" select="anonymous"/>
   <xsl:variable name="first" select="$authors[1]"/>
   <xsl:variable name="rest" select="$authors[position()!=1]"/>
   <xsl:element name="DIV">
      <xsl:attribute name="style">font-family:Verdana;font-size:10pt;color:gray;</xsl:attribute>
      <xsl:value-of select="$first/FirstName"/><xsl:text> </xsl:text><xsl:value-of select="$first/LastName"/>
   </xsl:element>

   <xsl:if test="$rest">
      <xsl:call-template name="fetch-authors">
         <xsl:with-param name="authors" select="$rest"/>
      </xsl:call-template>
   </xsl:if>
</xsl:template>

</xsl:stylesheet>

posted on 2005-07-28 20:43  栖息的熊  阅读(5162)  评论(0编辑  收藏  举报

导航