我可以在 HAML 中使用非字母数字元素名称吗?

Can I use non-alphanumeric element names in HAML?

我需要生成具有日文元素名称的遗留 XML。

!!! XML
%こんにちわ
  %素晴らしき
  %世界

但是,渲染时会出现无效标签错误。

pry(main)> Haml::Engine.new("!!! XML\n%こんにちわ\n    %素晴らしき\n     %世界").render
Haml::SyntaxError: Invalid tag: "%こんにちわ".
from (haml):2

如何渲染它?

Haml 似乎不是您创建遗留 XML 文件的正确工具。虽然 XML element and attribute names can use non-ASCII characters 是真的,但当我 运行 你在我的 IRB 中的代码时,我得到了和你一样的错误:

irb> Haml::Engine.new("!!! XML\n%こんにちわ\n    %素晴らしき\n     %世界").render
Haml::SyntaxError: Invalid tag: "%こんにちわ".
from (haml):2
from /Users/paul/.gem/ruby/2.3.0/gems/haml-4.0.7/lib/haml/parser.rb:520:in `parse_tag'

因此,错误似乎在 Haml::Parser#parse_tag,您可以在该方法的前两行中的 guard 子句中看到潜在的问题:

match = text.scan(/%([-:\w]+)([-:\w.#]*)(.+)?/)[0]
raise SyntaxError.new(Error.message(:invalid_tag, text)) unless match

让我们看看 match 的值对于不同的标签是什么:

irb> "%html".scan(/%([-:\w]+)([-:\w.#]*)(.+)?/)[0]
=> ["html", "", nil]
irb> "%こんにちわ".scan(/%([-:\w]+)([-:\w.#]*)(.+)?/)[0]
=> nil

所以,这似乎是问题所在:虽然日文标签对于 XML 本身可能是合法的,但您无法让它们通过 Haml 的解析器(除非您可能尝试自己进行猴子修补)。