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

如何将Tendril<UTF8>转换为&str或String?(HTML5ever场景)

把HTML5ever的Tendril转换为String的方法

嘿,这个问题我之前刚解决过!其实Tendril和String/&str的转换非常顺畅,因为Tendril本身就为UTF8实现了对应的转换 trait,完全不用复杂操作。

下面是两种最常用的方法:

方法1:直接调用to_string()

Tendril实现了标准库的ToString trait,所以可以直接调用to_string()方法得到String。结合你要收集属性到Vec<(String, String)>的需求,代码大概是这样的:

use html5ever::{Attribute, tendril::Tendril};
use markup5ever::QualName;

fn collect_attributes(attrs: &[Attribute]) -> Vec<(String, String)> {
    attrs.iter()
        .map(|attr| {
            // 把属性名(QualName的local部分)转成String
            let attr_name = attr.name.local.to_string();
            // 把Tendril<UTF8>类型的属性值直接转成String
            let attr_value = attr.value.to_string();
            (attr_name, attr_value)
        })
        .collect()
}

方法2:先转成&str再处理

如果你只是临时需要一个字符串切片,或者想更灵活地控制分配,可以先用as_str()方法得到&str,之后再根据需要转成String:

// 从Attribute里取出Tendril<UTF8>类型的值
let tendril_value: &Tendril<UTF8> = &attr.value;
// 转成&str
let str_value: &str = tendril_value.as_str();
// 如果需要String的话再转换
let string_value: String = str_value.to_string();

另外要提一句:Tendril本身就保证了存储的是有效的UTF-8数据,所以这些转换都是安全的,不会出现编码错误的问题,放心用就好!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:41:49