这俩天,在处理网站的SEO上,遇到了站点地图的一个问题;虽然我的网站已经有了站点地图和rss订阅,但它是xml格式的,只适合搜索引擎识别,如果我们想看的话,就是密密麻麻的一堆标签和内容,不太适合放出来展示。
  所以,就这个问题,一个比较直观的想法就是把xml文件转成对应的html进行展示,参考了百科,大多都是html转xml,因为xml转html,还需要写一个xsl文件来进行样式的处理,是不能直接改后缀生效的。

  由hexo-generator-seo-friendly-sitemap插件产生的站点地图,自带了.xsl文件,配置好后可直接查看.xml,而hexo-generator-baidu-sitemap插件产生的提交给百度的sitemap文件,就只有一个.xml了。由于本人水平有限,对xml的一些标签表示不太清楚,故暂时借用一下hexo-generator-seo-friendly-sitemap产生的.xsl进行转换

代码如下:

  先来看一下,baidusitemap.xml长什么样子吧。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://jarrychen.xyz/archives/cd5b6174.html</loc>
    <lastmod>2020-03-05</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/57a218f5.html</loc>
    <lastmod>2020-03-05</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/711943c8.html</loc>
    <lastmod>2020-03-02</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/fc9bb284.html</loc>
    <lastmod>2020-02-29</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/d029cbe6.html</loc>
    <lastmod>2020-02-28</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/c4c6c350.html</loc>
    <lastmod>2020-02-25</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/c2a5fdc5.html</loc>
    <lastmod>2020-02-25</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/de3d50cb.html</loc>
    <lastmod>2020-02-07</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/815fd02f.html</loc>
    <lastmod>2020-02-07</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/70255720.html</loc>
    <lastmod>2020-02-07</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/22103c9f.html</loc>
    <lastmod>2020-02-07</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/a1091a1c.html</loc>
    <lastmod>2020-01-18</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/ab71c588.html</loc>
    <lastmod>2020-01-16</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/64e18ccd.html</loc>
    <lastmod>2020-01-15</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/a6baa046.html</loc>
    <lastmod>2020-01-10</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/2fa0db1a.html</loc>
    <lastmod>2020-01-10</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/93bfc68e.html</loc>
    <lastmod>2020-01-07</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/d3eeae64.html</loc>
    <lastmod>2020-01-07</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/af39be20.html</loc>
    <lastmod>2020-01-06</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/3ec27523.html</loc>
    <lastmod>2020-01-04</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/356b4c47.html</loc>
    <lastmod>2019-12-29</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/9a5ad725.html</loc>
    <lastmod>2019-12-25</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/e4a9f70e.html</loc>
    <lastmod>2019-12-25</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/b1ebb1d3.html</loc>
    <lastmod>2019-12-23</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/c87fc611.html</loc>
    <lastmod>2019-12-15</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/98b3b24.html</loc>
    <lastmod>2019-12-15</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/31a1adce.html</loc>
    <lastmod>2019-12-13</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/2a998369.html</loc>
    <lastmod>2019-12-12</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/3acb628c.html</loc>
    <lastmod>2019-11-28</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/a2145d56.html</loc>
    <lastmod>2019-11-28</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/efa8ef13.html</loc>
    <lastmod>2019-11-25</lastmod>
  </url>  <url>
    <loc>https://jarrychen.xyz/archives/57361fba.html</loc>
    <lastmod>2019-11-21</lastmod>
  </url>
</urlset>

  它是直接只生成关于文章的部分,页面和标签、分类那些是没有的,不同于hexo-generator-seo-friendly-sitemap产生的sitemap.xml是有层次和涉及标签、分类的,而且每个map.xml下还有权重和修改频率的数据。


  .xsl代码比较长,而且只是在原先产生的.xsl基础上进行小部分的修改,只是在原来的基础上去掉了权重部分,以及加了一句提示。其他的图片、修改频率,没有数据的话不会展示。
   baidusitemap.xsl


  下面是利用java的处理这方面的包进行的处理逻辑,只需安装jdk以及修改文件的路径名即可。

import java.io.File;  
import java.io.FileInputStream;  
import java.io.PrintStream;  

import javax.xml.transform.Result;  
import javax.xml.transform.Source;  
import javax.xml.transform.Transformer;  
import javax.xml.transform.TransformerFactory;  
import javax.xml.transform.stream.StreamResult;  
import javax.xml.transform.stream.StreamSource;  

public class TransForm {  
    /** 
     * 将XML转换成HTML 
     * @throws Exception 
     */  
    public static void translate() throws Exception{  
        //创建XML的文件输入流  
        FileInputStream fis=new FileInputStream("换成你的xml文件路径");  
        Source source=new StreamSource(fis);  

        //创建XSL文件的输入流  
        FileInputStream fis1=new FileInputStream("换成你的xsl文件路径");  
        Source template=new StreamSource(fis1);  

        PrintStream stm=new PrintStream(new File("寰成你想生成的html路径")); 

        Result result=new StreamResult(stm);  
        //根据XSL文件创建准个转换对象  
        Transformer transformer=TransformerFactory.newInstance().newTransformer(template);  
        //处理xml进行交换  
        transformer.transform(source, result);   
        //关闭文件流  
        fis1.close();  
        fis.close();  
    }  

    public static void main(String[] args){  
        try {  
            translate();  
        } catch (Exception e) {  
            System.out.println("XML转换成HTML失败:"+e.getMessage());  
        }  
    }  
}

  大概的一个处理过程就是这样,样式的问题等后续有时间好好再对xsl文件进行调整。如果本篇文章对你有帮助,请转发给更多有需要的人,谢谢,转载请附上原文链接