• 迁移cnblog博客



    title: 迁移cnblog博客
    date: 2018-03-18
    categories: cnblogs
    tags: life


    写博客最怕就是这种迁来迁去的,太麻烦了
    还好老早就使用markdown编写,纯文本直接复制就可以了,格式不会差到哪去的,最低的保障有了可是还是很麻烦

    在cnblogs后台控制面板找到 博客备份, 这个可以将所有博客导出到一个xml文件中,确实方便了很多,感谢cnblogs
    后面就是各自用办法解析xml的问题了

    我这里直接使用bash来解析这个xml文件
    代码如下

    #!/bin/bash
    #
    set -e
    
    for num in {1..60}
    do
      title=$(echo "cat /rss/channel/item[${num}]/title/text()" |xmllint --shell cnblogs.xml | sed '1d;$d')
      pubDate=$(echo "cat /rss/channel/item[${num}]/pubDate/text()"|xmllint --shell cnblogs.xml | sed '1d;$d')
      datestr=$(date -d "$pubDate"  +"%Y-%m-%d %T")
      description=$(echo "cat /rss/channel/item[${num}]/description/text()" |xmllint --shell cnblogs.xml | sed -e '1d;$d' -e '2 s/<![CDATA[//' | sed -e '$s/]]>$//')
    
      echo "---" >                   "${title}".md
      echo "title: $title" >>        "${title}".md
      echo "date: $datestr" >>       "${title}".md
      echo "categories: cnblogs" >>  "${title}".md
      echo "tags: linux" >>          "${title}".md
      echo "---" >>                  "${title}".md
      echo  >>                       "${title}".md
      echo "$description" >>         "${title}".md
    done
    

    这里几个说明:

    1. 我之前看了博客总数是60,这里就没有从xml文件里面获取总数了
    2. 新的blog也是使用markdown,不过头部需要注明一些扩展元素(title,date,categories,tags等),这里直接写入这些信息
    3. 解析xml比较麻烦的就是正文内容了,之前的解析始终有xml的cdata字符(用--nocdata转换了特殊字符问题更大),这里用两条sed语句去除
    4. 使用的解析xml的工具是xmllint,centos(各个发行版基本都提供对应命令)可以使用yum provides xmllint查看属于哪个包 (Repo: base, Name: libxml2)
    5. 其实这里sed还是很有趣的,学海无涯沧海一粟

    最后按每条博客的标题生成一个markdown文件

    附注:
    毕竟不是python这种可以完美处理xml,可能会对解析xml的命令感到不解
    这里我主要参考:https://unix.stackexchange.com/questions/83385/parse-xml-to-get-node-value-in-bash-script
    也可以参考man手册,我这里之前用--xpath提取标题,导致编码有问题,使用这种方式可以正常处理

    我把测试文件附加上

    <?xml version="1.0"?>
    <config>
        <global>
            <install>
                <date><![CDATA[Tue, 11 Dec 2012 12:31:25 +0000]]></date>
            </install>
            <crypt>
                <key><![CDATA[70e75d7969b900b696785f2f81ecb430]]></key>
            </crypt>
            <disable_local_modules>false</disable_local_modules>
            <resources>
                <db>
                    <table_prefix><![CDATA[]]></table_prefix>
                </db>
                <default_setup>
                    <connection>
                        <host><![CDATA[localhost]]></host>
                        <username><![CDATA[root]]></username>
                        <password><![CDATA[pass123]]></password>
                        <dbname><![CDATA[testdb]]></dbname>
                        <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
                        <model><![CDATA[mysql4]]></model>
                        <type><![CDATA[pdo_mysql]]></type>
                        <pdoType><![CDATA[]]></pdoType>
                        <active>1</active>
                    </connection>
                </default_setup>
            </resources>
            <session_save><![CDATA[files]]></session_save>
        </global>
        <admin>
            <routers>
                <adminhtml>
                    <args>
                        <frontName><![CDATA[admin]]></frontName>
                    </args>
                </adminhtml>
            </routers>
        </admin>
    </config>
    

    参考使用方式

    {
    # the given XML is in file.xml
    host="$(echo "cat /config/global/resources/default_setup/connection/host/text()" | xmllint --nocdata --shell file.xml | sed '1d;$d')"
    username="$(echo "cat /config/global/resources/default_setup/connection/username/text()" | xmllint --nocdata --shell file.xml | sed '1d;$d')"
    password="$(echo "cat /config/global/resources/default_setup/connection/password/text()" | xmllint --nocdata --shell file.xml | sed '1d;$d')"
    dbname="$(echo "cat /config/global/resources/default_setup/connection/dbname/text()" | xmllint --nocdata --shell file.xml | sed '1d;$d')"
    printf '%s
    ' "host: $host" "username: $username" "password: $password" "dbname: $dbname"
    }
    
    # output
    # host: localhost
    # username: root
    # password: pass123
    # dbname: testdb
    
  • 相关阅读:
    Struts2中validate数据校验的两种常用方法
    Oracle中主键、外键、索引、序列、唯一性约束的创建
    Hibernate学习(五)Hibernate 多对多映射
    oracle实现主键自增
    现代软件工程 第三章:【软件工程师的成长】练习与讨论
    现代软件工程 第十七章 【人、绩效和职业道德】 练习与讨论
    现代软件工程 第十章 【典型用户和场景】 练习与讨论
    现代软件工程 第八章 【需求分析】练习与讨论
    现代软件工程 第七章 【MSF】练习与讨论
    现代软件工程 第六章 【敏捷流程】练习与讨论
  • 原文地址:https://www.cnblogs.com/mikeguan/p/8597578.html
Copyright © 2020-2023  润新知