Sina2WordPress的第一步——解析WXR文件格式
WXR是Wordpress eXtended Rss的缩写,是WordPress针对博客信息特意设定的格式,它最大的优点是兼容性好,包含信息丰富
通过参照导出的文件,初步找到一个完备集(见下方代码),经测试在WP无任何内容情况下无信息缺漏错误现象
下方代码已经尽可能的注释了所有可能的标签和属性,并且由于一些标签和属性与Sina2WordPress关系不大,故未深究
< ?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:excerpt="http://wordpress.org/export/1.1/excerpt/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wp="http://wordpress.org/export/1.1/" > <!--RSS版本号和名字空间的扩展,以上为固定内容--> <channel> <title>Blog Title</title> <!--博客的标题--> <link>http://blog.example.com</link> <!--博客的链接--> <description>Blog Description</description> <!--博客的说明/副标题--> <pubdate>Dec, 20 Jun 2012 23:59:59 +0000</pubdate> <!--WXR文件生成时间--> <language>en</language> <!--博客的语言,en / zh-cn--> <wp:wxr_version>1.1</wp:wxr_version> <!--WXR格式版本号--> <wp:base_site_url>http://example.com</wp:base_site_url> <!--网站根目录地址--> <wp:base_blog_url>http://blog.example.com</wp:base_blog_url> <!--博客根目录地址--> <wp:author><wp:author_id>1</wp:author_id><wp:author_login>admin_test</wp:author_login><wp:author_email>admin@example.org</wp:author_email><wp:author_display_name>< ![CDATA[AdMin test]]></wp:author_display_name><wp:author_first_name>< ![CDATA[AdMin]]></wp:author_first_name><wp:author_last_name>< ![CDATA[test]]></wp:author_last_name></wp:author> <!-- 作者列表,可多个 wp:author_id:自增序号 wp:author_login:用户名 wp:author_email:邮箱 wp:author_display_name:显示的作者名称 wp:author_first_name、wp:author_last_name:如字面意,可为空,但需有<![CDATA[]]> P.S.< ![CDATA[**]]>可以理解成强制文本转换,保留文本中所有字符,以避免非法字符对XML文件的影响(后文不再赘述) --> <wp:category><wp:term_id>1</wp:term_id><wp:category_nicename>category_test</wp:category_nicename><wp:category_parent></wp:category_parent><wp:cat_name>< ![CDATA[分类测试]]></wp:cat_name></wp:category> <!-- 分类列表,可多个 wp:term_id:自增序号,且分类和标签用的是同一个 wp:category_nicename:URL友好名称,作为相关URL的一部分 wp:category_parent:父分类,无即为空 wp:cat_name:显示的分类名称 --> <wp:tag><wp:term_id>2</wp:term_id><wp:tag_slug>tag_test</wp:tag_slug><wp:tag_name>< ![CDATA[标签测试]]></wp:tag_name></wp:tag> <!-- 标签列表,可多个 wp:term_id:自增序号,与标签使用同一个序列 wp:tag_slug:URL友好名称,作为相关URL的一部分 wp:tag_name:显示的标签名称 --> <generator>http://wordpress.org/?v=3.1.3</generator><!--WXR文件生成工具的标识--> <item><!--页面或者日志内容,每个为一个item--> <title>Title</title> <!--标题--> <link>http://blog.example.com/title/</link> <!--URL地址--> <pubdate>Thu, 15 Apr 2010 23:20:03 +0000</pubdate> <!--发布时间--> <dc:creator>admin</dc:creator> <!--文章作者--> <guid isPermaLink="false">http://blog.example.com/?page_id=1</guid> <!-- GUID 意为 Global Unique IDentification,即全局唯一标识 isPermaLink="false" 指示该地址非合法URL地址的属性 --> <description></description> <content:encoded>< ![CDATA[Content_test_1]]></content:encoded> <!--这里是正文内容--> <excerpt:encoded>< ![CDATA[]]></excerpt:encoded> <!--文章摘录,供RSS/Atom使用,一般为空--> <wp:post_id>2</wp:post_id> <!--页面或日志的序号,两者使用同一序列--> <wp:post_date>2012-12-21 07:59:5</wp:post_date> <!--发表时间--> <wp:post_date_gmt>2010-12-20 23:59:59</wp:post_date_gmt> <!--发表时间(GMT)--> <wp:comment_status>open</wp:comment_status> <!--评论开启情况,open / closed--> <wp:ping_status>closed</wp:ping_status> <!--Ping开启情况,open / closed--> <wp:post_name>blog_title</wp:post_name> <!--URL友好的名称--> <wp:status>publish</wp:status> <!--页面或日志状态,publish / draft / pending / private--> <wp:post_parent>0</wp:post_parent> <!--只用于页面,指示父页面的id--> <wp:menu_order>0</wp:menu_order> <!--只用与页面,作为导航时的排序权值--> <wp:post_type>post</wp:post_type> <!--文章类型,post / page--> <wp:post_password></wp:post_password> <!--文章是否加密--> <wp:is_sticky>0</wp:is_sticky> <!--文章是否置顶,0 / 1--> <category domain="post_tag" nicename="tag_test">< ![CDATA[Tag Test]]></category> <category domain="category" nicename="category_test">< ![CDATA[Category]]></category> <!-- 日志或页面的标签和分类,可多个 domain:标签对应post_tag,分类对应category nicename:对应标签或分类的URL友好名称 <![CDATA[]]>:标签或分类的显示名称 --> <wp:postmeta><!--日志或页面的元数据,可多个--> <wp:meta_key>_edit_last</wp:meta_key> <!--元数据的关键字--> <wp:meta_value>< ![CDATA[1]]></wp:meta_value> <!--元数据对应关键字的值--> </wp:postmeta> <wp:comment><!--评论,可多个--> <wp:comment_id>1</wp:comment_id> <!--自增序号,评论专用--> <wp:comment_author>< ![CDATA[anonymous]]></wp:comment_author>> <!--评论者用户名--> <wp:comment_author_email>anonymous@anonymous.com</wp:comment_author_email> <!--评论者邮箱--> <wp:comment_author_url>http://blog.anonymous.com</wp:comment_author_url> <!--评论者链接--> <wp:comment_author_ip>8.8.8.8</wp:comment_author_ip> <!--评论者IP--> <wp:comment_date>2012-12-21 07:59:59</wp:comment_date> <!--评论时间--> <wp:comment_date_gmt>2012-12-20 23:59:59</wp:comment_date_gmt> <!--评论时间(GMT)--> <wp:comment_content>< ![CDATA[Content of Comment]]></wp:comment_content> <!--评论内容--> <wp:comment_approved>1</wp:comment_approved> <!--评论是否被允许--> <wp:comment_type></wp:comment_type> <!--评论类型,空白表示一般评论,否则会标记位pingback--> <wp:comment_parent>0</wp:comment_parent> <!--父评论,指定所回复的评论--> <wp:comment_user_id>0</wp:comment_user_id> <!--如果评论者为注册用户,这里会记录用户ID--> </wp:comment> </item> </channel> </rss>