我正在尝试使用以下代码将文件读取为xml:importscala.xml._objectHebrewToEnglishCityTranslator{valdata=XML.loadFile("cities_hebrew_utf.xml");for(valentry但是,我的文件是用UTF-8(希伯来字符)编码的,XML编码是valencoding="ISO-8859-1"我该怎么办? 最佳答案 您应该使用XML.load(reader:java.io.Reader),它允许您指定文件编码:XML.load(newjava.io.In
我认为这个问题可能没有令人满意的答案,但我还是会问,以防遗漏了什么。基本上,我想在给定元素实例的情况下找出源文档中某个XML元素的来源行。我希望这样做只是为了更好地诊断错误消息——XML是配置文件的一部分,如果它有问题,我希望能够将错误消息的读者指向XML文档中的正确位置这样他就可以纠正错误。我知道标准的ScalaXML支持可能没有这样的内置功能。毕竟,用这样的信息注释每个NodeSeq实例是一种浪费,而且并不是每个XML元素甚至都有一个源文档来解析它。在我看来,标准的ScalaXML解析器会丢弃行信息,以后就没有办法检索它了。但是切换到另一个XML框架不是一种选择。为了更好的诊断错误
如何使用命名空间访问属性?我的XML数据在一个表单中vald=但是下面的不符合属性(d\\"Attachment"\"@about").toString如果我从属性的名称中删除命名空间组件,那么它就可以工作。vald=(d\\"Attachment"\"@about").toString知道如何在Scala中使用命名空间访问属性吗? 最佳答案 API文档引用了以下语法ns\"@{uri}foo"。在您的示例中没有定义namespace,Scala似乎认为您的属性没有前缀。请参阅d.attributes.getClass。现在如果你这
我在Nabble上看到了下面的例子,其目标是返回所有包含id为X且包含值Y的属性的节点://findallnodeswithanattribute"class"thatcontainsthevalue"test"valxml=XML.loadString("""hellohello""")defattributeEquals(name:String,value:String)(node:Node)={node.attribute(name).filter(_==value).isDefined}valtestResults=(xml\\"_").filter(attributeEqua
首先:我在Scala2.8我在XML元素上使用模式匹配时遇到一个小问题。我知道我可以做这样的事情:valmyXML=MyTextmyXMLmatch{case{theText}=>println(theText)case_=>}这是我在网上和我的两本Scala书籍中到处都能找到的例子。但是,如果我想根据属性匹配XML元素怎么办?valmyXML=AnawesomeText!myXMLmatch{case{theText}=>println("An%stext:%s".format(textType,theText))case_=>}编译器将向我抛出一个error:inXMLlitera
如何在不使用文字的情况下在Scala中创建节点?我需要的是在运行时设置节点标签名称,例如:vartag="post"varcontent="234"如何获取节点234? 最佳答案 在Scala2.8上:{content}.copy(label=tag) 关于xml-斯卡拉XML:createanodenotusingliterals,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/
我正在尝试为属性“日期”解析一个看起来像这样的rss提要:我尝试了几个不同的版本:(rssFeed包含RSS数据)println(((rssFeed\\"channel"\\"item"\"y:c"\"date").toString))但似乎没有任何效果。我错过了什么?非常感谢任何帮助! 最佳答案 中的“y”是命名空间前缀。它不是名称的一部分。此外,属性用“@”引用。试试这个:println(((rssFeed\\"channel"\\"item"\"c"\"@date").toString))
在下面的示例中,一旦属性“id”具有命名空间前缀,我该如何访问它?scala>valns=ns:scala.xml.Elem=scala>ns\"@id"res15:scala.xml.NodeSeq=bar以上工作正常。根据下面的文档应该可以,但实际上没有。scala>valns=ns:scala.xml.Elem=scala>ns\"@{xsi}id"res16:scala.xml.NodeSeq=NodeSeq()全部在Scala2.8.0.final上干杯答案:似乎在xml中没有xlmns就无法访问该属性。因此,要使上面的示例正常工作,它需要位于xlmnamespace内。例如
我写了一个makeMsg函数,但我不喜欢它-它似乎真的不符合Scala风格,可以根据Option.isDefined进行区分。你能做得更好吗?scala>defmakeMsg(t:Option[String])=|if(t.isDefined)elsemakeMsg:(t:Option[String])scala.xml.Elemscala>makeMsg(Some("hello"))res0:scala.xml.Elem=scala>makeMsg(None)res1:scala.xml.Elem= 最佳答案 你可以试试这个:de
scala>valcount=7count:Int=7将其放入XML属性会产生错误:scala>valx=:8:error:overloadedmethodconstructorUnprefixedAttributewithalternatives:(key:String,value:Option[Seq[scala.xml.Node]],next:scala.xml.MetaData)scala.xml.UnprefixedAttribute(key:String,value:String,next:scala.xml.MetaData)scala.xml.UnprefixedAtt