golang将YAML数据渲染为HTML的插件库htmlyaml的使用
Golang将YAML数据渲染为HTML的插件库htmlyaml的使用
htmlyaml是一个纯Go语言实现的库,可以将YAML数据渲染为格式化的HTML页面。它具有以下特点:
- 纯Go实现
- 不需要JavaScript
- 无外部依赖
- 不使用
reflect
反射 - 不使用
fmt
- 不使用
text/template
或html/template
- 仅300行代码
- 可自定义渲染方式
- 支持JSON Path访问元素
基本使用示例
package main
import (
"github.com/nikolaydubina/htmlyaml"
"gopkg.in/yaml.v3"
)
func main() {
// 示例YAML数据
exampleYAML := []byte(`
name: John Doe
age: 30
hobbies:
- reading
- hiking
- coding
`)
// YAML需要解析为any类型
var v any
yaml.Unmarshal(exampleYAML, &v)
// 使用默认渲染器生成HTML页面
htmlPage := htmlyaml.DefaultPageMarshaler.Marshal(v)
// 输出HTML
println(string(htmlPage))
}
自定义渲染示例
package main
import (
"github.com/nikolaydubina/htmlyaml"
"gopkg.in/yaml.v3"
)
func main() {
// 示例YAML数据
exampleYAML := []byte(`
cakes:
strawberry-cake:
size: 12
price: 15.99
chocolate-cake:
size: 8
price: 12.50
`)
// 解析YAML
var v any
yaml.Unmarshal(exampleYAML, &v)
// 自定义如何渲染HTML元素
s := htmlyaml.DefaultMarshaler
s.Number = func(k string, v float64, s string) string {
// 特定路径的数字显示为红色
if k == "$.cakes.strawberry-cake.size" {
return `<div class="yaml-value yaml-number" style="color:red;">` + s + `</div>`
}
// 大于10的数字显示为蓝色
if v > 10 {
return `<div class="yaml-value yaml-number" style="color:blue;">` + s + `</div>`
}
// 默认渲染
return `<div class="yaml-value yaml-number">` + s + `</div>`
}
// 配置页面渲染器
m := htmlyaml.DefaultPageMarshaler
m.Marshaler = &s
// 生成HTML页面
htmlPage := m.Marshal(v)
// 输出HTML
println(string(htmlPage))
}
htmlyaml库提供了灵活的渲染方式,可以根据需要自定义不同数据类型的HTML输出格式。
更多关于golang将YAML数据渲染为HTML的插件库htmlyaml的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang将YAML数据渲染为HTML的插件库htmlyaml的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用htmlyaml将YAML渲染为HTML
htmlyaml是一个Go语言的库,它允许你将YAML数据转换为HTML。这个库特别适合需要将结构化数据快速渲染为网页的场景。
安装
首先安装htmlyaml库:
go get github.com/osteele/htmlyaml
基本用法
下面是一个简单的示例,展示如何将YAML数据渲染为HTML:
package main
import (
"fmt"
"os"
"github.com/osteele/htmlyaml"
)
func main() {
yamlData := `
title: 我的网页
sections:
- title: 第一部分
content: 这是第一部分的内容
- title: 第二部分
content: 这是第二部分的内容
`
// 将YAML渲染为HTML
html, err := htmlyaml.Render([]byte(yamlData))
if err != nil {
fmt.Printf("渲染失败: %v\n", err)
os.Exit(1)
}
fmt.Println(string(html))
}
高级用法
htmlyaml支持更复杂的YAML结构,并可以自定义HTML模板:
package main
import (
"fmt"
"os"
"github.com/osteele/htmlyaml"
)
func main() {
yamlData := `
site:
title: 我的博客
author: 张三
posts:
- title: Go语言入门
date: 2023-01-15
tags: [go, 编程]
content: >
Go语言是Google开发的一种静态强类型、编译型语言。
- title: YAML简介
date: 2023-02-20
tags: [yaml, 数据]
content: >
YAML是一种人类可读的数据序列化标准。
`
// 自定义模板
template := `
<!DOCTYPE html>
<html>
<head>
<title>{{.site.title}}</title>
</head>
<body>
<h1>{{.site.title}}</h1>
<p>作者: {{.site.author}}</p>
{{range .posts}}
<article>
<h2>{{.title}}</h2>
<p>发布日期: {{.date}}</p>
<p>标签: {{range .tags}}{{.}} {{end}}</p>
<div>{{.content}}</div>
</article>
{{end}}
</body>
</html>
`
// 使用自定义模板渲染
html, err := htmlyaml.RenderWithTemplate([]byte(yamlData), []byte(template))
if err != nil {
fmt.Printf("渲染失败: %v\n", err)
os.Exit(1)
}
// 将结果写入文件
err = os.WriteFile("output.html", html, 0644)
if err != nil {
fmt.Printf("写入文件失败: %v\n", err)
os.Exit(1)
}
fmt.Println("HTML文件已生成: output.html")
}
功能特点
- 简单易用:只需几行代码即可将YAML转换为HTML
- 模板支持:可以使用Go的模板语法自定义输出
- 嵌套结构:支持复杂的YAML嵌套结构
- 轻量级:库体积小,无额外依赖
注意事项
- 确保YAML格式正确,否则会导致解析失败
- 模板语法遵循Go的标准模板语法
- 对于大型YAML文件,考虑性能影响
htmlyaml是一个简单但功能强大的工具,特别适合需要快速将结构化数据转换为网页的场景。通过自定义模板,你可以完全控制最终的HTML输出格式。