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

时间:2016-02-18 06:31:22

标签: xml haml cjk

我需要生成具有日语元素名称的旧XML。

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

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

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

我该如何呈现它?

1 个答案:

答案 0 :(得分:1)

看起来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的解析器(除非你试图自己修改它)。