You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从RSS的content:encoded中提取HTML元素?xmlstarlet使用遇阻

解决WordPress RSS解析的两个问题:转义HTML提取图片 & 缺失头图

一、修复content:encoded中HTML转义导致的解析错误

你的命令报错是因为content:encoded里的HTML被转义成了</>实体,直接传给xmlstarlet会被识别为纯文本而非XML节点。可以通过先解码实体,再用HTML模式解析解决:

# 提取content:encoded中指定类名的第一张图片URL
IMAGE_URL=$(xmlstarlet sel -t -m "/rss/channel/item[$itemnum]" -v "content:encoded" --decode feed.xml | xmlstarlet html -q -t -v "//img[@class='size-medium wp-image-2821 alignright'][1]/@src")
  • --decode:让xmlstarlet把转义的HTML实体还原成真实的</>标签
  • xmlstarlet html -q:用HTML模式解析(兼容WordPress可能存在的非严格HTML),-q静默忽略解析错误

二、解决RSS中缺失新闻头图的问题

默认WordPress RSS不会包含文章的特色图片(头图),需要手动添加代码到主题的functions.php文件,或者用插件实现:

方法1:在RSS内容中插入头图

添加以下代码,会把特色图片插入到RSS的摘要或内容开头:

function add_featured_image_to_rss($content) {
    global $post;
    if(has_post_thumbnail($post->ID)) {
        // 替换' medium'为你需要的图片尺寸,比如'large'/'full'
        $image_url = get_the_post_thumbnail_url($post->ID, 'medium');
        $content = '<img src="' . esc_url($image_url) . '" class="rss-featured-image" />' . $content;
    }
    return $content;
}
// 给RSS摘要和内容都添加头图
add_filter('the_excerpt_rss', 'add_featured_image_to_rss');
add_filter('the_content_feed', 'add_featured_image_to_rss');

方法2:添加自定义RSS标签(更易提取)

如果想直接提取头图URL,可添加自定义标签到RSS的item节点中:

function add_rss_featured_image_tag() {
    global $post;
    if(has_post_thumbnail($post->ID)) {
        $image_url = get_the_post_thumbnail_url($post->ID, 'medium');
        echo '<featured_image>' . esc_url($image_url) . '</featured_image>';
    }
}
// 把自定义标签添加到RSS2.0的每个item里
add_action('rss2_item', 'add_rss_featured_image_tag');

之后用xmlstarlet直接提取这个标签即可,无需解析HTML:

FEATURED_IMAGE=$(xmlstarlet sel -t -m "/rss/channel/item[$itemnum]" -v "featured_image" feed.xml)

内容的提问来源于stack exchange,提问作者Photon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:06:04