我希望创建这样的文档:我可以通过编程方式添加child。从理论上讲,它看起来像这样:valroot_node_name="root"valdoc=但这似乎不起作用:error:notfound:value所以,我尝试的是:valroot_node_name="root"valdoc=newscala.xml.Elem(null,root_node_name,null,scala.xml.TopScope,null)可以编译,但在运行时我得到这个空指针异常:java.lang.NullPointerExceptionatscala.xml.Utility$.toXML(Utility.s
看到Scala的强大功能,我想知道是否可以使用内置的Scala语言功能和库(例如,没有XMLEncoder、XStream或JAXB)将任意对象图序列化为XML或反序列化为XML。不幸的是,我还没有找到这样的解决方案。你有什么建议? 最佳答案 我不知道“是否可以使用内置的Scala语言功能和库将任意对象图序列化和反序列化为XML”,但由于Scala中有一些对XML的原生支持,我会提到他们。可以在Ch.中找到更多详细信息。26ProgramminginScala称为使用XML:ThischapterintroducesScala'ss
我一直在尝试使用Scala和XML,我发现使用XML.load(或loadString)创建的XML标记与将其写为文字之间在行为上存在奇怪的差异。这是代码:importscala.xml._//creatingaclassicallinkHTMLtagvalin_xml=//ThesameasaStringvalin_str=""""""//ConverttheStringintoXMLvalfrom_str=XML.loadString(in_str)println("in_xml:"+in_xml)println("from_str:"+from_str)println("val_
我有一个字符串列表,我需要用标签将它们连接在一起。所以从:vallist=List("line1","line2","line3")我需要以一个NodeSeq结束:line1line2line3列表可能只包含一个元素,在这种情况下,我应该以Text("line1")的NodeSeq结尾。是否有使用列表中高阶函数之一的单行代码来执行此操作?我试过使用foldLeft,但似乎无法让它做我想做的事。 最佳答案 list.map(scala.xml.Text(_):scala.xml.NodeSeq).reduce(_++++_)请注意,我
valname="mike"valxml={name}xml将为mike但是如果我想要xml是{name}怎么办?,不转换{name}? 最佳答案 你可以通过加倍来避开花括号valxml={{name}}给你{name} 关于xml-如何在scala的xml中输出{name},而不是转换它?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3336795/
我不熟悉ScalaXML库。有没有一种简单的方法可以找到文档的DTD?据我目前所见,scala.xml.XML.load仅返回Elem(文档的XML内容),但不是DTD。是否有另一种方法可以专门做到这一点?额外问题:文档开头的XML声明的相同问题。 最佳答案 要获取完整文档,您需要使用ConstructingParser,像这样:valcpa=scala.xml.parsing.ConstructingParser.fromSource(src,false)valdoc=cpa.document()valdtd=doc.dtddtd
要使用第3方库,我需要一个w3cDOM文档。但是,在Scala中创建xml节点更容易。所以我正在寻找一种将scalaxml元素转换为w3cdom的方法。显然,我可以序列化为一个字符串并对其进行解析,但我正在寻找性能更高的东西。 最佳答案 这是您可以构建的简单(无命名空间)版本。应该给出思路。只需将doc.createFoo(...)调用替换为等效的doc.createFooNS(...)调用即可。此外,可能需要更智能地处理属性。但是,这应该适用于简单的任务。objectScalaDom{importscala.xml._import
作为一名Java程序员,我对使用JAXB和类似工具感到很自在,例如从XML规范构造对象。我确定我可以让JAXB在scala中很好地工作,但我想知道如果这是scala的方式,或者如果有一些更好/更聪明的方式,特别是因为XML几乎是语言/它的内部库。所以,鉴于我想创建一组对象形式的XML规范,在Scala中推荐的方法是什么? 最佳答案 对于纯Scala,有scalaxb.它基于Scala解析器组合器生成案例类和解析器。它还很年轻,但如果您避开XMLSchema的高级功能,它就非常有用。 关于
我想选择名为“a”的节点的第一个子元素。我现在得到的是:(xml\"a")(0).child.collect{casee:Elem=>e}这很冗长。我在寻找类似的东西:xml\"a"\"*"这在Scala中可行吗? 最佳答案 您不能对NodeSeq上的现有\或\\方法执行任何操作。但是您可以使用新的\*方法扩展NodeSeq(注意缺少或空格字符),按照pimp-your-library模式:importxml.{NodeSeq,Elem}classChildSelectable(ns:NodeSeq){def\*=nsflatMap
阅读Scala2.11.0-RC1的发行说明,我注意到从2.11系列开始将scalaxml拆分到一个单独的jar。这会影响xml文字的使用,在2.11或后续版本中吗?显然,如果您使用xml文字,您还需要scalaxmljar——我想知道是否也有计划弃用xml文字。顺便说一句,我觉得Scala对XML的支持被认为是一个错误。作为一名语言用户,我当然对文字和插值的支持感到非常高兴。我发现MetaData和UnprefixedAttribute在处理属性方面有些笨拙,但并不可怕。scalaxml的主要问题是什么? 最佳答案 有athrea