我有 scala.xml.NodeSeq val,我需要将它写入文件。
我正在使用 scala.XML.save 来编写文件,但它生成的 XML 带有自闭合标签。我需要写它而不这样做。
我的代码正在生成这样的 XML
<value key="attribute"/>
我需要这个
<value key="attribute"></value>
我也尝试过使用 scala.XML.write 方法将最后一个参数作为 MinimizeMode.Never 传递,但它也生成了带有自闭合标签的 XML。
你知道有什么方法可以避免这种行为吗?
最佳答案
嗯,
scala> val x = <value key="attr"></value>
x: scala.xml.Elem = <value key="attr"></value>
scala> x.min
min minBy minimizeEmpty
scala> x.minimizeEmpty
res0: Boolean = false
scala> val x = <value key="attr"/>
x: scala.xml.Elem = <value key="attr"/>
scala> x.minimizeEmpty
res1: Boolean = true
scala> val pw = new java.io.PrintWriter(Console.out)
pw: java.io.PrintWriter = java.io.PrintWriter@2b50150
scala> xml.XML.write(pw, x, "", false, null)
scala> pw.flush
<value key="attr"/>
scala> val x = <value key="attr"></value>
x: scala.xml.Elem = <value key="attr"></value>
scala> xml.XML.write(pw, x, "", false, null) ; pw.flush()
<value key="attr"></value>
scala> val x = <value key="attr"/>
x: scala.xml.Elem = <value key="attr"/>
scala> xml.XML.write(pw, x, "", false, null) ; pw.flush()
<value key="attr"/>
scala> xml.XML.write(pw, x, "", false, null, xml.MinimizeMode.Never) ; pw.flush()
<value key="attr"></value>
除了 Elem 之外还有 NodeSeq,显然:
scala> val n: NodeSeq = new xml.Unparsed("""<value key="attr"/>""")
n: scala.xml.NodeSeq = <value key="attr"/>
scala> xml.XML.write(pw, n.head, "", false, null, xml.MinimizeMode.Never) ; pw.flush()
<value key="attr"/>
scala>
显示 OP 指出的错误:
$ scala
Welcome to Scala version 2.11.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import xml._
import xml._
scala> val pw = new java.io.PrintWriter(Console.out)
pw: java.io.PrintWriter = java.io.PrintWriter@17d99928
scala> val x = <value key="attr"><value key="another"/></value>
x: scala.xml.Elem = <value key="attr"><value key="another"/></value>
scala> xml.XML.write(pw, x, "", false, null, xml.MinimizeMode.Never) ; pw.flush()
<value key="attr"><value key="another"/></value>
scala>
https://github.com/scala/scala-xml/blob/master/src/main/scala/scala/xml/Utility.scala#L237
编辑,显示它已在 2.12 中修复:
$ scala
Welcome to Scala 2.12.3 (OpenJDK 64-Bit Server VM, Java 1.8.0_131).
Type in expressions for evaluation. Or try :help.
scala> import xml._
import xml._
scala> val pw = new java.io.PrintWriter(Console.out)
pw: java.io.PrintWriter = java.io.PrintWriter@1a256d80
scala> val x = <value key="attr"><value key="another"/></value>
x: scala.xml.Elem = <value key="attr"><value key="another"/></value>
scala> xml.XML.write(pw, x, "", false, null, xml.MinimizeMode.Never) ; pw.flush()
<value key="attr"><value key="another"></value></value>
scala>
https://github.com/scala/scala-xml/commit/b696beaa481a11a5276186b9e2bc2be3cb32a922
关于xml - 在 Scala 中编写非自闭标签 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24769804/
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写Ruby,但似乎Redis之类的数据库和Rescue、RabbitMQ等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果Redis崩溃,数据也会丢失,因为它本质上只是内存。所有这些让我开始关注erlang和
我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes
我使用rails3.1+rspec和factorygirl。我对必填字段(validates_presence_of)的验证工作正常。我如何让测试将该事实用作“成功”而不是“失败”规范是:describe"Addanindustrywithnoname"docontext"Unabletocreatearecordwhenthenameisblank"dosubjectdoind=Factory.create(:industry_name_blank)endit{shouldbe_invalid}endend但是我失败了:Failures:1)Addanindustrywithnona
我正在尝试用Ruby(Rails)编写一个正则表达式,以便用户名的字符仅包含数字和字母(也没有空格)。我有这个正则表达式,/^[a-zA-Z0-9]+$/,但它似乎没有用,我在Rails中收到一个错误,说“The如果正则表达式使用多行anchor(^或$),这可能会带来安全风险。您是要使用\A和\z,还是忘记添加:multiline=>true选项?"我的user.rb模型中此实现的完整代码是:classUser我做错了什么以及如何修复此正则表达式,使其仅对数字和字母有效而不对空格有效?谢谢。 最佳答案 简短回答:使用/\A[a-z
我有这样的HTML代码:Label1Value1Label2Value2...我的代码不起作用。doc.css("first").eachdo|item|label=item.css("dt")value=item.css("dd")end显示所有首先标记,然后标记标签,我需要“标签:值” 最佳答案 首先,您的HTML应该有和中的元素:Label1Value1Label2Value2...但这不会改变您解析它的方式。你想找到s并遍历它们,然后在每个你可以使用next_element得到;像这样:doc=Nokogiri::HTML(
我有以下不起作用的代码:=form_for(resource,:as=>resource_name,:url=>session_path(resource_name),:html=>{:class=>"well"})do|f|=f.label:email=f.email_field:email=f.label:password=f.password_field:password-ifdevise_mapping.rememberable?%p=f.label:remember_me,:class=>"checkbox"=f.check_box:remember_me,:class=>"