考虑以下两段代码:
# H: Z# h+ Z, ^代码如下:
# |1 b+ L$ R) O6 w. I) V+ I" ?<urlset> # ^7 a3 V9 Q- y1 e5 A. V
<url>
. C6 [# w! [) _! y2 y<loc>http://www.caixw.com/archives/1.html</loc>
: H g) ^0 A# e0 q. k3 ?<lastmod>2010-05-20t16:30:59+08:00</lastmod> / S: r- O8 o- {. l" J6 T
</url> ( N0 l- f+ l5 |" G2 `" ^0 i t8 ]0 A
<url> ! B7 F i1 p7 P& v3 ]/ Q) u4 n
<loc>http://www.caixw.com/archives/2.html</loc> " l" @3 n- w* T
<lastmod>2010-05-20t16:35:59+08:00</lastmod> , S ]; K' h& O/ t2 F
</url> 1 g8 b: n+ Y) O% a+ U$ d
</urlset>
7 a9 \5 Q) A0 S4 p s; g这是一段标准的sitemap文件,当然为简单点,我把url的两个子节点去掉了,但总体上不影响我们使用。
, {$ S" H+ w( a# g) K代码如下:
8 b, u5 U; r ?0 W* ]6 O<xsl:stylesheet version=1.0 xmlns:xsl=> 2 @# y; h/ e/ t' x/ O- C
<xsl:output method=html encoding=utf-8 indent=yes version=1.0 />
8 J* D0 c. ]6 R<xsl:template match=/ xmlns:sm=>
7 B; e. M+ ~- C& A9 |% D/ q<html>
: n4 @5 ]$ T, n8 ^4 u5 r6 H4 W( H<head>
( w ]; Q/ k3 k5 ?4 G! \7 |. v<title>xml sitemap</title>
" b& f* Y: \1 `$ l. ]</head>
& C' ?9 M. J; N<body>
0 `: c2 E/ R9 f7 e8 l7 [<xsl:apply-templates select=urlset /> / g+ P9 Z( B) I( [; ^1 _ d
</body>
1 q/ V5 z; D& W9 d</html> . q- U! }5 I) n/ z
</xsl:template> : S+ C+ q! b% z9 @( U
<xsl:template match=urlset> 2 ]; b$ G" o |. Q5 {% ^! i/ \
<table> 1 {& K- n- X6 C. a) t
<xsl:for-each select=url>
0 ?" o- ?9 U' g# T% X<tr>
$ w: z9 F; `! s. |2 m: G" h8 \& E9 H7 P<td><a> , s' Z4 Z( P" Y! }& ^- V' n3 Z
<xsl:attribute name=href><xsl:value-of select=loc /></xsl:attribute> & g" X# h; r4 q2 K8 ]5 J( b6 k/ d
<xsl:value-of select=loc /> `7 w- L1 x$ {
</a></td>
% c1 l' ^# c' M/ p2 L$ v- G) b<td><xsl:value-of select=substring-before(lastmod, 't') /></td>
; j( ]) ~4 `" Z% T' G</tr> . V- D9 W5 E$ X" `- ?5 e% K
</xsl:for-each> 2 T* Z5 J4 n {
</table> & p( @& A. ~0 E# H
</xsl:template> 1 e, p% C) E5 a9 d; S4 V
</xsl:stylesheet> , O6 D9 e# y; E% M- ]: M
这是一段转换sitemap的代码,再次偷懒,把输出的表格的内容给过滤掉了一部分。要完整版的看本站右下角的sitemap文件。
" P4 D0 g% Q' ^以上这两段代码能够正确的进行转换,没有什么问题。现在我们给xml文件加上一个命名空间(事实上现在大部分xml文件都存在这样那样的命名空间,sitemap也不例外): 4 ^" W7 F% l2 z* V$ L
代码如下:
: s3 x$ x9 E0 I1 e9 Z+ _# X<urlset xmlns=> 0 y. e; e+ f# i1 B7 s: m
<url> 9 H, `5 R$ l2 L' Q- l
<!-- ... --> ( t. `( L1 S; @( g3 f$ P: D
</url> & W0 N1 O: \/ Q
</urlset> - k9 p& h2 \6 ^+ C! k) f
ok,现在应该不能正确转换了,body部分变成空的了。很明显无法匹配urlset节点了。因为现在所有sitemap文件下的节点都是带命名空间的,不能再这样直接使用了。都要带上命名空间前缀才能正确匹配。
" D% i% ?# s. F' v% D8 ?% `当然,要使用命名空间,首先要声明它。在xsl:stylesheet标签中再声明一个命名空间:
. U F a6 a4 H O/ O% f6 L% c; d; {代码如下:6 Q1 i% p! i+ I/ O; w
<xsl:stylesheet version=1.0 xmlns:xsl= xmlns:sitemap=>
: i/ E! b) f* P# C然后在所有原先匹配xml文件节点的都加上sitemap前缀: 5 p* V& x; s4 D7 V
<td><xsl:value-of select=substring-before(sitemap:lastmod, 't') /> 7 ]7 g* S5 H; \+ v7 f ?
; U% h" n/ a# S4 S* g H, f& q' i
更多网页制作信息请查看: 网页制作 |
|