que necesito para generar un xml para una alimentación que se ve más o menos así: -etiquetas namespace prefix y CDATA en la generación de XML para la alimentación de RSS en Ruby on Rails
<?xml version="1.0" encoding="iso-8859-1" ?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<item>
<g:id><![CDATA[id]]></g:id>
<title><![CDATA[Product Name]]></title>
<description><![CDATA[This should be a relatively detailed description with as little formatting as possible.]]></description>
<g:brand>Brand X</g:brand>
<g:sale_id>new</g:sale_id>
</item>
<item>
Next product...
</item>
</channel>
</rss>
Mi código actualmente es como la siguiente: -
xml=Builder::XmlMarkup.new(:indent => 3)
xml.instruct!
xml.rss("version" => "2.0" , "xmlns:g" => "http://base.google.com/ns/1.0" , "xmlns:atom" => "http://www.w3.org/2005/Atom"){
xml.channel{
# remove xml.namespace = xml.namespace_definitions.find{|ns|ns.prefix=="atom"}
sale_products.each do |sp|
sid = (products_info[sp.product_id]["sale_id"]).to_s()
xml.item {
#xml.id{ |xml| xml.cdata!(products_info[sp.product_id].own_id) }
#xml.g :id,{ xml.cdata!("sdaf") }
xml.product_title{ |xml| xml.cdata!(products_info[sp.product_id].name) }
xml.description{ |xml| xml.cdata!(ActionController::Base.helpers.strip_tags(products_info[sp.product_id].description)) }
xml.item {
xml.brand { |xml| xml.cdata!(products_info[sp.product_id].designer_1) }
xml.sale_id{ |xml| xml.cdata!(sid) }
}
}
end
}
}
Mi problema está en conseguir que los prefijos de espacio de nombre y las etiquetas cdata funcionen al mismo tiempo.
xml.g :id, "fdsafsad"
Esto obtiene el prefijo namesapce.
xml.product_title{ |xml| xml.cdata!(products_info[sp.product_id].name) }
Esto obtiene etiquetas cdata alrededor de los valores.
xml.g :id,{ xml.cdata!("sdaf") }
Esto no hace el truco.
¿Cómo puedo obtener tanto el prefijo de espacio de nombres como las etiquetas de cdata que funcionan al mismo tiempo para la misma etiqueta? ¿Qué estoy haciendo mal?
Editar: - La salida que actualmente estoy recibiendo es como: -
<g:id>
<![CDATA[10005-0003]]>
</g:id>
La salida que desee simplemente debe tener el valor dentro de las etiquetas CDATA (sin salto de línea, etc.): -
<g:id><![CDATA[10005-0003]]></g:id>
Tenga en cuenta que no quiero eliminar: indent => 3 al crear el marcado, para que otras etiquetas tengan el formato requerido.
¿Puede elaborar sobre el que "no hace el truco"? ¿Qué hace de hecho? Hay un error? ¿Qué producción produce? – LarsH
Además, ¿por qué tienes una coma después de ': id'? – LarsH
yup, hay un error. –