我需要生成具有日语元素名称的旧XML。
!!! XML
%こんにちわ
%素晴らしき
%世界
但是,渲染时会出现无效的标记错误。
pry(main)> Haml::Engine.new("!!! XML\n%こんにちわ\n %素晴らしき\n %世界").render
Haml::SyntaxError: Invalid tag: "%こんにちわ".
from (haml):2
我该如何呈现它?
答案 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的解析器(除非你试图自己修改它)。