Rust 转换向量<;奶牛<',[u8]>;至&;str
lib(quick_xml)函数(attributes())返回一个类型为Rust 转换向量<;奶牛<',[u8]>;至&;str,rust,Rust,lib(quick_xml)函数(attributes())返回一个类型为Vec的值。您可以使用std::str::from_utf8将和[u8]错误转换为&str: use std::borrow::Cow; fn main() { let s = "test"; let v = s.as_bytes(); let c = Cow::Borrowed(v); println!("{}", std::str::from_u
Vec的值。您可以使用std::str::from_utf8
将和[u8]
错误转换为&str
:
use std::borrow::Cow;
fn main() {
let s = "test";
let v = s.as_bytes();
let c = Cow::Borrowed(v);
println!("{}", std::str::from_utf8(&*c).unwrap());
}
关键部分是对Cow
的删除和重新加载,因为from_utf8
采用和[u8]
而不是Cow
Cow
为T
执行Deref
,在这种情况下T
是[u8]
,因此您可以通过和*
获得和[u8]
在您的具体示例中,您应该能够通过以下方式获得Vec
:
e.attributes().map(|a| std::str::from_utf8(&*a.unwrap().value).unwrap()).collect::<Vec<_>>()
e.attributes()
我假设您正在引用。在将来,请给我们完整的源代码-这使回答这个问题更容易
理解代码
让我们一步一步来:
这是。它返回表示一个标记具有的属性集的值。在您的例子中,这只是一个属性:它有名称attr1
和值test
,这意味着您可以在包含的s上进行迭代(请注意,包含多个s–它们不是同一类型!)。如果您想了解有关迭代器的更多信息,您可能需要阅读
这个迭代器接受一个名为a
的参数,正如我上面所说的,它是原始迭代器包含的类型。我在上面说过,属性
包含多个属性
s–虽然这是真的,但它不是全貌,迭代器迭代包含属性
的结果,但是如果XML以某种方式无效,a
也可能表示某种解析错误。我们不想关心这里的错误处理,所以我们只调用它,返回包含的参数
,如果出现错误,它会惊慌失措
属性
结构包含两个值:和[值
]。我们只对value
感兴趣,所以让我们选择它。value
字段的类型为cow。根据您的描述,很难理解您正在尝试做什么。许多生锈类型实现了to_string()方法。也许你可以试试。请注意,你可能不想使用&str
,而是想使用字符串
,因为当原始Vec
超出范围时,前者不可能存在。
e.attributes().map(|a| a.unwrap().value).collect::<Vec<_>>()
^
e.attributes().map(|a| a.unwrap().value).collect::<Vec<_>>()
^^^^^^^^^^^^
e.attributes().map(|a| a.unwrap().value).collect::<Vec<_>>()
^^^^^^^^^^^^^^^^^^^^^^^^^
|a| a.unwrap().value
^^^
|a| a.unwrap().value
^^^^^^^^^^
|a| a.unwrap().value
^^^^^
e.attributes().map(|a| a.unwrap().value).collect::<Vec<_>>()
^^^^^^^^^^^^^^^^^^^
e.attributes().map(|a| a.unwrap().unescape_and_decode_value(&reader).unwrap()).collect::<Vec<_>>()