Rust HTML生成库build_html的使用:高效构建和操作HTML文档的Rust工具
Rust HTML生成库build_html的使用:高效构建和操作HTML文档的Rust工具
build_html是一个允许使用Builder模式从Rust代码生成HTML字符串的库。通过链式调用添加元素来构建HTML文档,最后将结构体转换为字符串以便在程序中使用。
基本用法
use build_html::{HtmlElement, HtmlTag, Html};
let element = HtmlElement::new(HtmlTag::Div)
.with_child(
HtmlElement::new(HtmlTag::ParagraphText)
.with_child("Paragraph Text".into())
.into()
)
.with_child(
HtmlElement::new(HtmlTag::PreformattedText)
.with_child("Preformatted Text".into())
.into()
)
.to_html_string();
assert_eq!(element, "<div><p>Paragraph Text</p><pre>Preformatted Text</pre></div>");
完整HTML页面生成
use build_html::{HtmlPage, Html, HtmlContainer};
let page = HtmlPage::new()
.with_title("TITLE")
.with_paragraph("PARAGRAPH")
.to_html_string();
assert_eq!(page, concat!(
"<!DOCTYPE html><html>",
"<head><title>TITLE</title></head>",
"<body><p>PARAGRAPH</p></body>",
"</html>"
));
更复杂的示例
use build_html::*;
let html: String = HtmlPage::new()
.with_title("My Page")
.with_header(1, "Main Content:")
.with_html(
HtmlElement::new(HtmlTag::Article)
.with_attribute("id", "article1")
.with_header_attr(2, "Hello, World", [("id", "article-head"), ("class", "header")])
.with_paragraph("This is a simple HTML demo")
)
.to_html_string();
生成的HTML字符串等价于:
<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
</head>
<body>
<h1>Main Content:</h1>
<article id="article1">
<h2 id="article-head" class="header">Hello World</h2>
<p>This is a simple HTML demo</p>
</article>
</body>
</html>
完整示例Demo
use build_html::*;
fn main() {
// 创建一个完整的HTML页面
let html_page = HtmlPage::new()
.with_title("Rust HTML生成示例")
.with_header(1, "欢迎使用build_html")
.with_html(
HtmlElement::new(HtmlTag::Div)
.with_attribute("class", "container")
.with_child(
HtmlElement::new(HtmlTag::Article)
.with_attribute("id", "main-article")
.with_header_attr(2, "文章标题", [("class", "article-title")])
.with_paragraph("这是一个使用Rust生成的HTML文档示例。")
.with_html(
HtmlElement::new(HtmlTag::Ul)
.with_child(
HtmlElement::new(HtmlTag::Li)
.with_child("列表项1".into())
.into()
)
.with_child(
HtmlElement::new(HtmlTag::Li)
.with_child("列表项2".into())
.into()
)
.into()
)
.into()
)
.into()
)
.to_html_string();
println!("{}", html_page);
}
这个库的主要目的是提供一种简单的方法来构建动态元素,这些元素可以注入到HTML页面或框架中。优点是允许您使用现代编辑器功能(如语法高亮)编写大部分HTML,然后使用标准库的include_str!
宏导入HTML文件,并使用format!
宏注入新元素。
如果页面非常简单或整个页面都是动态的,您可能希望完全从Rust代码创建整个页面。为了满足这个用例,库提供了HtmlPage
结构体。
1 回复
Rust HTML生成库build_html的使用:高效构建和操作HTML文档的Rust工具
build_html
是一个简单易用的Rust库,用于以类型安全的方式构建HTML文档。它提供了流畅的API来创建HTML元素、属性和内容,无需手动拼接字符串。
安装
在Cargo.toml中添加依赖:
[dependencies]
build_html = "2.0"
基本用法
创建简单HTML文档
use build_html::*;
let html = HtmlPage::new()
.with_title("My Page")
.with_header(1, "Welcome to my website!")
.with_paragraph("This is a paragraph of text.")
.to_html_string();
println!("{}", html);
输出结果
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>My Page</title>
</head>
<body>
<h1>Welcome to my website!</h1>
<p>This is a paragraph of text.</p>
</body>
</html>
主要功能
1. 创建容器元素
use build_html::*;
let html = Container::new()
.with_attributes([("class", "my-container")])
.with_paragraph("First paragraph")
.with_paragraph("Second paragraph")
.to_html_string();
println!("{}", html);
2. 创建列表
use build_html::*;
let html = Container::new()
.with_ul()
.with_li("First item")
.with_li("Second item")
.with_li("Third item")
.to_html_string();
println!("{}", html);
3. 添加链接和图片
use build_html::*;
let html = Container::new()
.with_link("https://www.rust-lang.org", "Visit Rust")
.with_image("rust-logo.png", "Rust Logo")
.to_html_string();
println!("{}", html);
4. 创建表格
use build_html::*;
let html = Container::new()
.with_table()
.with_header_row(["Name", "Age", "Occupation"])
.with_row(["Alice", "30", "Engineer"])
.with_row(["Bob", "25", "Designer"])
.to_html_string();
println!("{}", html);
5. 自定义元素
use build_html::*;
let html = Container::new()
.with_element(
"div",
[("class", "custom-div"), ("id", "main-content")],
"This is a custom div element"
)
.to_html_string();
println!("{}", html);
高级用法
嵌套结构
use build_html::*;
let html = HtmlPage::new()
.with_title("Nested Example")
.with_container(
Container::new()
.with_attributes([("class", "main-content")])
.with_heading(2, "Section 1")
.with_paragraph("Content for section 1")
.with_container(
Container::new()
.with_attributes([("class", "sub-section")])
.with_heading(3, "Subsection")
.with_paragraph("Nested content")
)
)
.to_html_string();
println!("{}", html);
动态生成内容
use build_html::*;
let items = vec!["Apple", "Banana", "Cherry"];
let mut container = Container::new().with_ul();
for item in items {
container = container.with_li(item);
}
let html = HtmlPage::new()
.with_title("Dynamic Content")
.with_container(container)
.to_html_string();
println!("{}", html);
完整示例
下面是一个结合了多种功能的完整示例:
use build_html::*;
fn main() {
// 创建HTML页面
let html = HtmlPage::new()
.with_title("Complete Example")
// 添加导航栏
.with_container(
Container::new()
.with_attributes([("class", "navbar")])
.with_link("#home", "Home")
.with_link("#about", "About")
.with_link("#contact", "Contact")
)
// 添加主要内容区域
.with_container(
Container::new()
.with_attributes([("class", "main-content")])
.with_heading(1, "Welcome to our Website")
.with_paragraph("This is a complete example of using build_html library.")
// 添加产品列表
.with_heading(2, "Our Products")
.with_ul()
.with_li("Product 1")
.with_li("Product 2")
.with_li("Product 3")
// 添加表格
.with_heading(2, "Pricing")
.with_table()
.with_header_row(["Product", "Price", "Stock"])
.with_row(["Product 1", "$10.99", "100"])
.with_row(["Product 2", "$15.99", "50"])
.with_row(["Product 3", "$20.99", "25"])
)
// 添加页脚
.with_container(
Container::new()
.with_attributes([("class", "footer")])
.with_paragraph("© 2023 My Company. All rights reserved.")
)
.to_html_string();
println!("{}", html);
}
特点
- 类型安全:编译时检查HTML结构
- 流畅API:链式调用简化代码
- 无需字符串拼接:自动处理HTML转义
- 可组合:可以轻松组合和嵌套元素
- 轻量级:没有复杂的依赖关系
build_html
非常适合需要以编程方式生成HTML的场景,如网页模板、报告生成或电子邮件内容创建。