golang将YAML数据渲染为HTML的插件库htmlyaml的使用

Golang将YAML数据渲染为HTML的插件库htmlyaml的使用

htmlyaml是一个纯Go语言实现的库,可以将YAML数据渲染为格式化的HTML页面。它具有以下特点:

  • 纯Go实现
  • 不需要JavaScript
  • 无外部依赖
  • 不使用reflect反射
  • 不使用fmt
  • 不使用text/templatehtml/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")
}

功能特点

  1. 简单易用:只需几行代码即可将YAML转换为HTML
  2. 模板支持:可以使用Go的模板语法自定义输出
  3. 嵌套结构:支持复杂的YAML嵌套结构
  4. 轻量级:库体积小,无额外依赖

注意事项

  1. 确保YAML格式正确,否则会导致解析失败
  2. 模板语法遵循Go的标准模板语法
  3. 对于大型YAML文件,考虑性能影响

htmlyaml是一个简单但功能强大的工具,特别适合需要快速将结构化数据转换为网页的场景。通过自定义模板,你可以完全控制最终的HTML输出格式。

回到顶部