'expected slice, found u8' 使用 Kuchiki 解析字节时出错

'expected slice, found u8' error when parsing bytes with Kuchiki

我在尝试执行以下操作时 运行 遇到类型错误:

use kuchiki::parse_html;
use kuchiki::traits::*;

fn main() {
    let data = r#"<!DOCTYPE html>
                  <html>
                      <body>
                          test
                      </body>
                  </html>"#;
    let dom = parse_html()
        .from_utf8()
        .from_iter(data.as_bytes());
}

错误是:

error[E0271]: type mismatch resolving `<tendril::fmt::Bytes as tendril::fmt::SliceFormat>::Slice == u8`
  --> src/main.rs:13:10
   |
13 |         .from_iter(data.as_bytes());
   |          ^^^^^^^^^ expected slice, found u8
   |
   = note: expected type `[u8]`
              found type `u8`
   = note: required because of the requirements on the impl of `std::convert::Into<tendril::tendril::Tendril<tendril::fmt::Bytes>>` for `&u8`

data.as_bytes() returns 对一段字节 (&[u8]) 的引用,所以我对 found u8 的来源感到困惑。我该如何纠正这个错误?

相关方法的文档 are here

使用read_from()代替from_iter(),像这样:

use kuchiki::parse_html;
use kuchiki::traits::*;

fn main() {
    let data = r#"<!DOCTYPE html>
                  <html>
                      <body>
                          test
                      </body>
                  </html>"#;
    let dom = parse_html()
        .from_utf8()
        .read_from(&mut data.as_bytes());
}

你遇到了编译错误,因为 from_iter() 需要一个项目类型为 Tendril 的迭代器。 Tendril 是一种字符串,因此 data 的类型需要类似于 Vec<&[u8]>,但您有 &[u8].

您也可以使用 from_iter() 使其工作,但它有点少 clear/efficient:

use kuchiki::parse_html;
use kuchiki::traits::*;

fn main() {
    let data = r#"<!DOCTYPE html>
                  <html>
                      <body>
                          test
                      </body>
                  </html>"#;
    let dom = parse_html()
        .from_utf8()
        .from_iter(vec![data.as_bytes()]);
}