考虑以下两段代码: - w3 I. ]4 R' ?" t8 w$ e
代码如下:: w: y4 k# g: P' `- `
<urlset>
' Q4 W$ B! ?: S<url>
: |& A. d: n* W$ R8 h/ |/ q<loc>http://www.caixw.com/archives/1.html</loc>
6 K# C! r; A! D8 ~<lastmod>2010-05-20t16:30:59+08:00</lastmod> ; ?7 J1 u6 E6 ?5 W
</url>
0 y# z M3 \8 ~1 u<url> ' C# j3 V/ Q e# _* ]
<loc>http://www.caixw.com/archives/2.html</loc>
6 }" ?4 O7 S/ n9 ` ] E" d<lastmod>2010-05-20t16:35:59+08:00</lastmod>
+ C7 v4 L: {- c/ {; b/ i9 m/ h</url> 1 S$ L+ R8 ^$ L& M& Q* v; N
</urlset>
( F t+ l8 Z* s6 I- B0 \) q2 {. O这是一段标准的sitemap文件,当然为简单点,我把url的两个子节点去掉了,但总体上不影响我们使用。
& @; ~' D2 N$ i代码如下:! |- p# }0 c8 B3 w- o
<xsl:stylesheet version=1.0 xmlns:xsl=>
6 t" G+ L: v7 E4 a/ `# ?( r( Y<xsl:output method=html encoding=utf-8 indent=yes version=1.0 />
9 e3 G; C0 W$ @8 l. a7 e" k2 Z<xsl:template match=/ xmlns:sm=> ' z7 G$ v( C' A. p! z- |/ z1 K
<html> / A* }7 k+ r. a* i
<head> 8 ?7 e j, Z& C* ~( D! _
<title>xml sitemap</title>
! \8 a3 l3 b7 h3 Y2 l: U1 A</head> ) O" @' n$ x0 g$ x+ \
<body> - o& |# i" w( W5 \7 P
<xsl:apply-templates select=urlset /> + u0 e7 L$ E1 Y8 c7 J
</body> ; o: B7 S% d w' I N
</html>
0 a I- i: r% b$ V</xsl:template>
; k# |6 ?* O& A M<xsl:template match=urlset>
: K7 E) q/ `9 m: Z<table>
% u4 D8 C+ ^8 q: L1 A( [<xsl:for-each select=url>
9 ]0 `. D( G$ r<tr>
2 l4 t0 H% F. L6 u1 m<td><a>
" {& C* U/ f; ?7 Y<xsl:attribute name=href><xsl:value-of select=loc /></xsl:attribute> 1 ^9 G3 p9 N6 a" g$ z9 D ~% O7 F0 ^
<xsl:value-of select=loc />
$ b9 j& a1 S1 [4 o</a></td>
' O$ x5 x9 C9 ?+ h9 p7 E<td><xsl:value-of select=substring-before(lastmod, 't') /></td>
( @5 x8 O2 @0 p8 ~</tr> 5 ~) p/ Z! L: [: U9 y
</xsl:for-each>
, |/ m( X3 I, t5 L+ I0 p</table>
: C' `: m! b% C N1 g8 H</xsl:template>
6 s8 W' y$ u2 K0 _</xsl:stylesheet> 4 U6 L4 i, ?# s
这是一段转换sitemap的代码,再次偷懒,把输出的表格的内容给过滤掉了一部分。要完整版的看本站右下角的sitemap文件。
+ U4 g1 w7 d, [" o以上这两段代码能够正确的进行转换,没有什么问题。现在我们给xml文件加上一个命名空间(事实上现在大部分xml文件都存在这样那样的命名空间,sitemap也不例外): w/ j' G6 ]; F9 p' j
代码如下:# B, c) J5 _2 C+ u
<urlset xmlns=>
) `; Y( _# h! r<url>
/ X! G. L, r2 j6 q<!-- ... --> # R& G% t$ [0 r4 p
</url> ; O$ y/ ^+ m4 _/ y: T1 ~3 o
</urlset>
( O* t& ?% L9 @: G: {ok,现在应该不能正确转换了,body部分变成空的了。很明显无法匹配urlset节点了。因为现在所有sitemap文件下的节点都是带命名空间的,不能再这样直接使用了。都要带上命名空间前缀才能正确匹配。 # F& h, r4 @2 v, u; G6 P9 n8 ~; U- S
当然,要使用命名空间,首先要声明它。在xsl:stylesheet标签中再声明一个命名空间: 8 v, }+ B- k& Y# J* u0 m$ N2 Z0 y
代码如下:, Z* ]7 }+ U. Z1 g
<xsl:stylesheet version=1.0 xmlns:xsl= xmlns:sitemap=> + p2 c$ h$ z4 X& g$ X) Y# R! J3 B# m
然后在所有原先匹配xml文件节点的都加上sitemap前缀: & b7 @2 F' c% s2 k
<td><xsl:value-of select=substring-before(sitemap:lastmod, 't') /> 0 s+ @& S4 u8 ?( |& a& g0 e: y
; F3 p) ~3 z4 U- t7 P" }更多网页制作信息请查看: 网页制作 |
|