gpt4 book ai didi

ruby-on-rails - 使用生成器生成 XML 时额外的

转载 作者:数据小太阳 更新时间:2023-10-29 01:41:33 25 4
gpt4 key购买 nike

我正在尝试使用 Builder 生成 KML。我知道他们有一些选项可以帮助解决这个问题,但我将做一些 2.2 特定的事情,我看过的 KML gem 不支持这些事情,并且通常希望能够仅利用 XML 框架来完成这个.

渲染我的 kml/xml 时,我在文件末尾得到一个标记。我强烈怀疑我在设置 Builder 对象或渲染输出时遗漏了一些基本知识。这是一个演示该问题的简单示例:

def kml2dot2
@site = Site.find(params[:id])
xml = Builder::XmlMarkup.new(:indent => 2)
xml.instruct!
xml.kml("xmlns" => "http://www.opengis.net/kml/2.2") {
xml.Placemark do
xml.name @site.mapNameFull
xml.Point do
xml.coordinates @site.lat.to_s + "," + @site.lng.to_s + ",0"
end
end
}
render :text => xml, :type=>"text/kml"

end

产生:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Placemark>
<name>Seattle City Hall</name>
<Point>
<coordinates>47.6040746,-122.33005,0</coordinates>
</Point>
</Placemark>
</kml>
<to_s/>

我正在尝试了解如何避免 <to_s/>被包括在内以及我在使用 Builder 时做错了什么。感谢您的任何见解。

最佳答案

我的简短原始回答

要获取 Builder 的实际字符串内容,您需要调用方法 target!

xml = Builder.new
# do your stuff...
xml.target! #returns the string
#where as calling most other methods (like to_s) to the builder object will just
#generate an element tag by that method name.


然后对 OP 案例中发生的事情和原因进行更详细的解释

当您将 xml 构建器对象传递给 render 方法时,Rails 会自动为其调用 to_s 方法。通常这意味着您无需担心传递给渲染器的数据类型,因为它无论如何都会被转换为字符串。很方便!但是,对于 Builder 对象,您需要自己进行转换,因为构建器假定发送给它的任何消息都是按名称添加新元素的请求。所以调用 xml.to_s 的行为与调用 xml.kml 的行为相同,只是添加了一个新元素。在这种情况下,您不会调用 to_s 自己,因此它不那么明显并且很容易错过。对此的简单解决方法是像这样调用 render:

render :text => xml.target!, :type=>"text/kml"

关于ruby-on-rails - 使用生成器生成 XML 时额外的 <to_s/>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4961609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com