2010-05-10 15 views
8

He estado trabajando en una pieza de software en la que necesito generar un archivo XML personalizado para enviarlo a una aplicación cliente. Las soluciones actuales en el mundo de Ruby/Rails para generar archivos XML son lentas, en el mejor de los casos. Usando el generador o evento Nokogiri, aunque tienen una sintaxis agradable y son soluciones mantenibles, consumen demasiado tiempo y procesamiento.¿Es posible generar XML simple usando Haml?

Definitivamente podría ir a ERB, que ofrece una buena velocidad a expensas de construir todo el XML a mano.

HAML es una gran herramienta, tiene una sintaxis agradable y directa y es bastante rápida. Pero estoy luchando para construir archivos XML puros que lo usan. Lo que me hace pensar, ¿es posible?

¿Alguien tiene algunos consejos para algunos códigos o documentos que muestran cómo hacerlo, compila un XML completo y válido de HAML?

Respuesta

35

Haciendo XML en HAML es fácil, basta con comenzar su plantilla con:

!!! XML 

que produce

<?xml version='1.0' encoding='utf-8' ?> 

Entonces, como @beanish dijo anteriormente, "hacer su propia etiquetas":

%test 
    %test2 hello 
    %item{:name => "blah"} 

para obtener

<test> 
    <test2>hello</test2> 
    <item name='blah'></item> 
</test> 

Más: http://haml.info/docs/yardoc/file.REFERENCE.html#doctype_

-1

Debería ser posible. Después de todo, puedes crear un simple XML antiguo con el Bloc de notas.

+0

¿Cuál es su lógica? Notepad es un editor de texto interactivo. HAML es un generador de marcado automático. ¿Cuál es la conexión? –

+0

Creo que solo dice que no hay absolutamente nada de lujos en XML. – Matchu

2

Tal vez me falta algo, pero ¿qué tendría de diferente el uso de haml para xml en lugar de html?

Dices que estás luchando, pero ¿con qué estás luchando? ¿Podría publicar un código de muestra?

8
%test 
    %test2 hello 
    %item{:name => "blah"} 

ejecutarlo a través de haml

haml hamltest.haml test.xml 

abrir el archivo en un navegador

<test> 
    <test2>hello</test2> 
    <item name='blah'></item> 
</test> 

Las conversaciones de referencia HAML Etiquetas HTML y da algunos ejemplos. HAML reference

1

Haml puede producir XML tan fácilmente como HTML (lo he usado para FBML y XHTML). ¿Qué problemas tienes?

0

No he usado HAML, pero si no puede hacerlo funcionar, otra opción es Builder.

+0

El tipo de generador es una mierda en comparación con Haml. En mi humilde opinión es la cosa más inútil del ecosistema de Rails. –

-1

¿qué ocurre al crear el encabezado xml, p. <? Xml version = "1.0" encoding = "UTF-8"?> ?

+0

Haml puede hacer eso con '!!! XML'. Y si no puede, puede incluirlo como texto sin formato. –

3

Esto demuestra algunas cosas que podrían utilizar útil para documentos XML:

!!! XML 
%root{'xmlns:foo' => 'http://myns'} 
    -# Note: :dashed-attr is invalid syntax 
    %dashed-tag{'dashed-attr' => 'value'} Text 
    %underscore_tag Text 
    - ['apple', 'orange', 'pear'].each do |fruit| 
    - haml_tag(fruit, "Yummy #{fruit.capitalize}!", 'fruit-code' => fruit.upcase) 
    %foo:nstag{'foo:nsattr' => 'value'} 

Salida:

<?xml version='1.0' encoding='utf-8' ?> 
<root xmlns:foo='http://myns'> 
    <dashed-tag dashed-attr='value'>Text</dashed-tag> 
    <underscore_tag>Text</underscore_tag> 
    <apple fruit-code='APPLE'>Yummy Apple!</apple> 
    <orange fruit-code='ORANGE'>Yummy Orange!</orange> 
    <pear fruit-code='PEAR'>Yummy Pear!</pear> 
    <foo:nstag foo:nsattr='value'></foo:nstag> 
</root> 

Mira el Haml :: helpers de enlaces en el haml reference para más métodos como haml_tag.

Si desea utilizar comillas dobles para los atributos,

Ver: https://stackoverflow.com/a/967065/498594

o fuera de los carriles usar:

>> Haml::Engine.new("%tag{:name => 'value'}", :attr_wrapper => '"').to_html 
=> "<tag name=\"value\"></tag>\n" 
Cuestiones relacionadas