考虑以下两段代码:
( `; |/ y) z9 R5 q3 {代码如下:
5 u1 a# B! e% K! N; O& C5 k<urlset> / l$ P ~( I6 P1 t3 Y5 i: V8 B
<url> 3 o$ R* i" l B
<loc>http://www.caixw.com/archives/1.html</loc>
" ~( ]1 b- m. X3 A<lastmod>2010-05-20t16:30:59+08:00</lastmod> , @/ B; C( `0 i8 l' a) v
</url>
' g4 y' b/ A1 c7 i+ d2 f<url> " G5 V/ J" [5 [
<loc>http://www.caixw.com/archives/2.html</loc>
& Y4 g( r7 ]; {+ B7 _9 v: u0 N& Z1 o<lastmod>2010-05-20t16:35:59+08:00</lastmod>
+ d: L, x! {+ T$ D8 x% x$ z3 f</url> 7 r( k3 S3 z- s- q7 D: w( }
</urlset> ( ^ K' N$ L) \3 f
这是一段标准的sitemap文件,当然为简单点,我把url的两个子节点去掉了,但总体上不影响我们使用。 _8 f2 o1 |' {, D9 f
代码如下:
8 t$ w' O5 J7 N3 i; }0 _* x<xsl:stylesheet version=1.0 xmlns:xsl=>
3 x% w; h! G2 R; A4 m, X* x* {, S# _1 ?<xsl:output method=html encoding=utf-8 indent=yes version=1.0 />
& h0 J* ^$ @3 ]6 t' j<xsl:template match=/ xmlns:sm=> 3 e3 [6 Z! V8 ^- {
<html>
% W+ w m C$ D$ F<head> ) a6 U7 J" t, k) t1 l- _) g
<title>xml sitemap</title> 5 I/ s; |: u1 p" X
</head> # v4 H, ^: ^9 ^6 r5 }
<body>
) e* k \1 }5 a+ U' a9 q$ r$ W<xsl:apply-templates select=urlset />
- G4 ~+ Z5 T/ R, v; _</body>
- e& U- I4 @4 V# h4 z</html> ; U; m) ?, }" q4 Z$ s; ?* t
</xsl:template>
8 z* y3 j7 m0 p8 s' {<xsl:template match=urlset>
z# w" @2 i6 H# g# L<table>
O2 t: @; @6 L5 r9 p6 ~. w- s<xsl:for-each select=url>
7 z) @& Q7 i( ?$ Q6 C<tr>
( E1 t. k2 o* Q# e4 ?<td><a> ) ~" u y: q8 M) L7 `/ |6 C. a- Q
<xsl:attribute name=href><xsl:value-of select=loc /></xsl:attribute> % R. o, Z! C; {% O
<xsl:value-of select=loc />
# {" b) M: r- e6 R4 `4 F; X</a></td>
% p1 H4 |( f) H F R3 ~6 O<td><xsl:value-of select=substring-before(lastmod, 't') /></td> , C7 w7 T: t. t5 E7 p" Z
</tr>
. O0 i" K) r; T& x9 Z. ?4 u' L1 h7 M" E</xsl:for-each>
0 u0 t( p3 m# z* q</table> ' ~, H: x3 w0 ~* l
</xsl:template> 2 v" `4 n) _8 x& v* }' l: R
</xsl:stylesheet>
9 Z) h9 t8 \( ~) m这是一段转换sitemap的代码,再次偷懒,把输出的表格的内容给过滤掉了一部分。要完整版的看本站右下角的sitemap文件。
6 X9 q3 ?4 ?7 S/ j; F r3 H) p以上这两段代码能够正确的进行转换,没有什么问题。现在我们给xml文件加上一个命名空间(事实上现在大部分xml文件都存在这样那样的命名空间,sitemap也不例外): 1 U6 K# o: v% ?& m5 i% ]( p9 R
代码如下:
( _; n8 L. @6 U* Q1 N- d3 Y<urlset xmlns=>
. f7 X! ?. {' M) l<url>
V+ \; O1 o: \% Q- f5 k<!-- ... --> 9 l. P4 Z9 y* Y1 }2 w0 f3 e5 R% }
</url> " y( b% `: L, U7 T8 `
</urlset> 1 p5 `: P( y" r
ok,现在应该不能正确转换了,body部分变成空的了。很明显无法匹配urlset节点了。因为现在所有sitemap文件下的节点都是带命名空间的,不能再这样直接使用了。都要带上命名空间前缀才能正确匹配。
; Q2 E8 l% g. \' w! R7 z2 M当然,要使用命名空间,首先要声明它。在xsl:stylesheet标签中再声明一个命名空间: ) F. R5 S7 i; J2 j n
代码如下:
" t6 X- Z! g7 z/ L% q$ w, J<xsl:stylesheet version=1.0 xmlns:xsl= xmlns:sitemap=> & i% _7 G9 q2 U0 b* C* X! c, ^" J
然后在所有原先匹配xml文件节点的都加上sitemap前缀:
; C4 W; B. C8 b2 w1 m4 u, @% C7 u$ z' F8 L<td><xsl:value-of select=substring-before(sitemap:lastmod, 't') /> + \ {" c& D# m* I5 @/ w
" h! [7 e5 Q) N- H; `0 g更多网页制作信息请查看: 网页制作 |
|