ToolConvoyToolConvoyv2.6
DATA

YAML 转 XML — 在浏览器中将 YAML 配置转换为 XML 标记

将 YAML 数据转换为 XML 标记。可配置根元素、属性启发式规则和美化输出 —— 全部在客户端运行,不上传数据、没有次数限制。

● 本地运行 · 零拷贝流水线页面加载以来工具发出的网络请求:0 次

YAML 是人写的格式,而 XML 是企业系统所期望的格式,它们之间的落差正是本工具存在的理由。DevOps 团队用 YAML 来定义基础设施(Kubernetes manifest、Ansible playbook、Terraform 变量),因为 YAML 紧凑且可读;而一套老旧的监控系统则以 XML 消费这些数据,因为这个监控系统诞生于 XML 充当通用交换格式的年代。从 YAML 到 XML 的转换架起了这道桥梁:它接过一份为人类可读性而写的 YAML 结构,产出任何 XML-aware 系统都能消费的 XML 文档。

转换过程以 JSON 为中间表示 —— YAML 先被解析为 JSON,再由 JSON 序列化为 XML —— 因此属性约定与 JSON-to-XML 工具中的约定保持一致。以 @ 开头的 YAML 键会成为 XML 属性,普通键成为子元素。这套约定不属于任何标准,却是 npm 与 Python 生态圈中事实上的做法,也是可移植性方面最合适的默认值。YAML 序列变成重复的 XML 元素,这也是唯一自然的映射方式 —— 在 XML 的树形模型里,YAML 的列表除了用同名元素在同一深度上重复出现,再没有别的对等表达。

最后再讲一些交接环节的要点:如果 XML 输出要进入 SOAP 服务或 XML-RPC 端点,转换前请先确认期望的根元素名 —— SOAP 信封要求特定的外层结构,本工具的通用根元素未必能匹配上。如果 XML 需要符合某个 schema,可以用 JSON Schema Generator(从中间那份 JSON 表示出发)先生成 JSON Schema,再手工把约束映射为 XSD。如果输出需要为内嵌的标记内容加上 CDATA 段,请在转换之后手工补上 <![CDATA[...]]> 的包裹 —— 本工具输出的是纯文本内容,并不会检测某个值里含有需要 CDATA 封装的 XML 或 HTML。

广告

使用方法

  1. 粘贴你的 YAML 数据

    把 YAML 字符串或文件拖入输入区。解析器读取 YAML 1.2,会解析 anchor、alias 和 merge key。解析完成后的数据结构会转换为 XML,元素命名可配置。

  2. 配置 XML 输出

    设置根元素名(默认为 `<root>`),选择缩进(2 或 4 空格),并切换 `@` 键转属性的约定。以 `@` 开头的 YAML 键会成为其父元素上的 XML 属性。

  3. 复制或下载 XML

    把格式化好的 XML 复制到剪贴板,或下载为 .xml 文件。输出包含标准的 `<?xml version="1.0" encoding="UTF-8"?>` 声明,是合法的 XML 1.0。

常见问题

转换器如何决定 XML 元素的名字?

YAML 映射的键会直接作为 XML 元素名。以数字开头、包含空格或含有 XML 元素名非法字符的键,会通过加下划线前缀的方式做规范化处理。`@key` 约定会把 YAML 键 `@type` 转成父元素上的 XML 属性 `type="..."`。

YAML 序列(即数组)在 XML 输出中会怎样?

YAML 序列(用 `-` 开头的项)会变成重复出现的 XML 兄弟元素。YAML 中的 `ports: [80, 443]` 会被转成 `<ports>80</ports><ports>443</ports>`。包裹元素使用该序列的键名,每个项会变成同名的子元素。

YAML 的 anchor 和 alias 会被保留为 XML 引用吗?

不会。anchor 和 alias 会在 YAML 解析阶段被解析,并以内联展开的形式出现在 XML 输出中。XML 中包含的是完全展开后的数据。YAML 的 anchor/alias 体系没有直接的 XML 对应物 —— XInclude 或实体引用才是 XML 中对应的做法,但本工具不会生成这些。

转换器如何处理 YAML 的布尔值和空值?

YAML 的 `true` 和 `false`(以及它们的别名 `yes`/`no`/`on`/`off`)会成为 XML 文本内容中的 `true` 和 `false`。YAML 的 `null`(以及 `~` 和空值)会根据空值处理设置,变成自闭合的空元素 `<key/>`,或变成 `<!-- null -->` 形式的注释。

限制说明

  • 不会生成 XML Schema 或 DTD本工具只产出 XML 数据,不会产出 XML 校验规则。如果需要 schema,请先用 JSON Schema Generator(先 YAML 转 JSON,再 JSON 转 Schema)走一遍,再手工写出等价的 XSD 约束。
  • 标量 YAML 会产生单元素的 XML 文档如果一个 YAML 文件只有标量值(单个字符串、数字或布尔值),转换后会得到一个包含该标量的根元素的 XML 文档。本工具适合结构化的映射或序列数据。
  • 不会为内嵌内容包装 CDATA含有 HTML 或 XML 内容的 YAML 值会作为普通文本输出,不会包在 CDATA 段里。如果消费方强制要求用 CDATA 段封装片段,请在转换之后手工补上包裹。

平台说明

macOS
命令行场景下,`yq -p yaml -o xml input.yaml` 可以完成转换。当机器上没有装 yq 又需要偶尔做一次 YAML 转 XML 的转换,浏览器工具就是合适的选择。
Web
所有 YAML 解析和 XML 生成都在客户端完成。不会有任何数据上传。页面加载完成后即可离线使用,便于处理敏感的配置。
广告

相关工具

广告