考虑以下两段代码: 7 F1 K) Q3 o m/ r6 ?1 K7 C
代码如下:# W- k4 n/ y& U
<urlset> , i) j/ ]4 ]7 k# C/ Y% U/ z% ^
<url> 8 `! s$ u" V, ] x+ t. {7 E
<loc>http://www.caixw.com/archives/1.html</loc> 0 o* N8 N; N. ~4 D, l
<lastmod>2010-05-20t16:30:59+08:00</lastmod> ( \! }$ I0 W. j
</url>
4 O/ x) C* Z' ~# p<url>
) f+ E6 x8 Q5 h8 V9 g<loc>http://www.caixw.com/archives/2.html</loc> * A8 }+ k2 [1 m2 |6 B
<lastmod>2010-05-20t16:35:59+08:00</lastmod>
3 n8 K1 G& F, u- D' i</url>
5 v# a: B0 A" p* v) K</urlset>
: ?% P* Y( ^2 _7 _这是一段标准的sitemap文件,当然为简单点,我把url的两个子节点去掉了,但总体上不影响我们使用。- z, P" x1 m& t/ Z+ y6 W
代码如下:! B$ t* f. l4 n( r8 c7 H* b
<xsl:stylesheet version=1.0 xmlns:xsl=> ) h! F2 y( l7 c% A" \5 ?
<xsl:output method=html encoding=utf-8 indent=yes version=1.0 /> + ]1 o, h7 S% m% o; Z
<xsl:template match=/ xmlns:sm=> 7 W7 Y) I1 P7 u
<html> 8 \( x4 f3 W9 `2 ?
<head>
" M/ B- e, }/ X& ^0 B<title>xml sitemap</title>
9 k, ]" b, a; n2 l. R$ \</head>
* W% z: `# `6 ]/ K+ g<body>
" ?) B$ _1 A0 j1 `" b( [/ F<xsl:apply-templates select=urlset />
9 R4 B/ e, n6 m" G9 U# V" Y/ v</body> / F# q9 W) c8 o: r
</html>
- K6 f+ `3 Y- k2 ?$ [# S+ B</xsl:template>
; D" Y3 C* J0 D T. D: W) z<xsl:template match=urlset>
$ c' a8 J$ j+ w! ]2 _2 l$ v<table> / z6 F7 J9 d. P# C6 C5 d
<xsl:for-each select=url> - Y% x. ~2 L0 D* j G0 f
<tr> 1 h' Y) d$ t, o7 e4 l
<td><a> # u3 H4 I$ S6 ~, n8 N2 C
<xsl:attribute name=href><xsl:value-of select=loc /></xsl:attribute>
! k5 E5 P; W w. `<xsl:value-of select=loc /> / c. [* y1 D8 ?1 M' f+ D# S4 V: ]- o
</a></td> . J) W& P3 Q( v/ t! s! K% D* X
<td><xsl:value-of select=substring-before(lastmod, 't') /></td> 1 R1 e/ `2 Y; N0 k- {
</tr> 6 h) U H4 k V. K8 Y. g. p; t
</xsl:for-each> 4 y. y$ r, m7 W$ |& I1 {; Z: F
</table> ! O. L" z- W7 T& w7 e$ m: K
</xsl:template> * D9 ? Y2 d* A* O7 E q" R* G
</xsl:stylesheet>
5 Y: h" {8 n9 p( F这是一段转换sitemap的代码,再次偷懒,把输出的表格的内容给过滤掉了一部分。要完整版的看本站右下角的sitemap文件。 : W& K; D- _2 |# g
以上这两段代码能够正确的进行转换,没有什么问题。现在我们给xml文件加上一个命名空间(事实上现在大部分xml文件都存在这样那样的命名空间,sitemap也不例外): ) P" Q: C# k9 z/ Q- [ [
代码如下:# } x- h* ?6 w/ N
<urlset xmlns=>
! J# K0 M3 v5 F( `% d. S<url>
6 H' N# W5 `& Z7 X' |* _<!-- ... -->
: _+ u) j" A! B# G</url> % Z. K, G2 K i6 `: X% n7 R
</urlset>
% F0 q- |; [; O; X& N9 ~2 R$ Bok,现在应该不能正确转换了,body部分变成空的了。很明显无法匹配urlset节点了。因为现在所有sitemap文件下的节点都是带命名空间的,不能再这样直接使用了。都要带上命名空间前缀才能正确匹配。
7 X R& H9 W4 z9 s2 @4 J3 Q当然,要使用命名空间,首先要声明它。在xsl:stylesheet标签中再声明一个命名空间:
/ Q* g/ p+ H3 b2 a3 A4 y代码如下:
2 p3 T1 W* o6 A0 p# z N<xsl:stylesheet version=1.0 xmlns:xsl= xmlns:sitemap=>
/ r. _: K4 i) P2 Z然后在所有原先匹配xml文件节点的都加上sitemap前缀: ( P: z2 _ M0 ~5 S M7 e/ [; G& T
<td><xsl:value-of select=substring-before(sitemap:lastmod, 't') /> F6 K) {' A( v: a
U* {% M8 L3 [. Y5 }, B2 K0 \更多网页制作信息请查看: 网页制作 |
|