2010-10-01 20 views
12

Sơ đồ trang web Google của tôi hiển thị tốt thông qua XSLT mà không có xmlns = "http: //www.sitemaps. org/schemas/sitemap/0.9 "trong phần tử url < urlset, tuy nhiên khi được đưa vào, báo cáo foreach của tôi không hoạt động và không có gì hiển thị trong mẫu. Mã của tôi dưới đây. Cảm ơn bạn đã giúp đỡ.XSLT không hoạt động khi tôi bao gồm xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9"

XML

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
<url> 
<loc>{site_url}</loc> 
<lastmod>{current_time format="%Y-%m-%d"}</lastmod> 
<changefreq>monthly</changefreq> 
<priority>0.5</priority> 
</url> 
</urlset> 

XSL

<xsl:template match="/"> 
<html> 
<body> 
<h2>Sitemap</h2> 
<table border="1"> 
<tr bgcolor="#9acd32"> 
    <th>Location</th> 
    <th>Last Modified</th> 
    <th>Update Frequency</th> 
    <th>Priority</th> 
</tr> 
<xsl:for-each select="urlset/url"> 
<tr> 
    <td><xsl:value-of select="loc"/></td> 
    <td><xsl:value-of select="lastmod"/></td> 
    <td><xsl:value-of select="changefreq"/></td> 
    <td><xsl:value-of select="priority"/></td> 
</tr> 
</xsl:for-each> 
</table> 
</body> 
</html> 
+0

Câu hỏi hay (+1). Xem câu trả lời của tôi cho một lời giải thích và cho một giải pháp hoàn chỉnh. –

Trả lời

17

My Google sitemap renders well through XSLT fine without the xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" in the <urlset> element, however when included, my foreach statement doesn't work and nothing renders in the template

Đây là một câu hỏi thường gặp.

XPath xử lý bất kỳ tên không cố định nào thuộc về "không có không gian tên". Tuy nhiên, các yếu tố trong tài liệu được cung cấp thuộc về không gian tên "http://www.sitemaps.org/schemas/sitemap/0.9" - không phải là "no namespace".

Do đó, khái niệm XPath sau đây không chọn bất kỳ nút nào cả:

urlset/url 

Giải pháp:

Xác định không gian tên "http://www.sitemaps.org/schemas/sitemap/0.9" trong kiểu XSLT và kết hợp một tiền tố để nó. Sau đó, sử dụng tiền tố này với tất cả các tên tham gia vào bất kỳ biểu thức XPath nào.

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:s="http://www.sitemaps.org/schemas/sitemap/0.9" 
exclude-result-prefixes="s" 
> 

<xsl:template match="/"> 
    <html> 
    <body> 
     <h2>Sitemap</h2> 
     <table border="1"> 
     <tr bgcolor="#9acd32"> 
      <th>Location</th> 
      <th>Last Modified</th> 
      <th>Update Frequency</th> 
      <th>Priority</th> 
     </tr> 
     <xsl:for-each select="s:urlset/s:url"> 
      <tr> 
      <td><xsl:value-of select="s:loc"/></td> 
      <td><xsl:value-of select="s:lastmod"/></td> 
      <td><xsl:value-of select="s:changefreq"/></td> 
      <td><xsl:value-of select="s:priority"/></td> 
      </tr> 
     </xsl:for-each> 
     </table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

khi chuyển đổi này được áp dụng trên các tài liệu XML cung cấp:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
    <url> 
     <loc>{site_url}</loc> 
     <lastmod>{current_time format="%Y-%m-%d"}</lastmod> 
     <changefreq>monthly</changefreq> 
     <priority>0.5</priority> 
    </url> 
</urlset> 

nó một cách chính xác tạo ra kết quả sau:

<html> 
    <body> 
     <h2>Sitemap</h2> 
     <table border="1"> 
     <tr bgcolor="#9acd32"> 
      <th>Location</th> 
      <th>Last Modified</th> 
      <th>Update Frequency</th> 
      <th>Priority</th> 
     </tr> 
     <tr> 
      <td>{site_url}</td> 
      <td>{current_time format="%Y-%m-%d"}</td> 
      <td>monthly</td> 
      <td>0.5</td> 
     </tr> 
     </table> 
    </body> 
</html> 
+0

Câu trả lời hay! Cảm ơn! Lời giải thích của bạn rất rõ ràng và giải pháp đã hoạt động! – Julian

+0

Bạn có biết cách đặt {site_url} thành url có thể nhấp không. Khi tôi thử mã bên dưới, tôi nhận được lỗi sau: "Lỗi phân tích cú pháp XML: không được định dạng đúng Vị trí: tên tệp.com/sitemapxsl Dòng số 194, Cột 26: "có mũi tên trỏ tới cú đúp trái đầu tiên của cú pháp xsl - Mã như sau -" " – Julian

+1

@Julian: Đây là một Câu hỏi thường gặp khác :). Sử dụng:' ' –

3
Các vấn đề liên quan