小编ed.*_*ed.的帖子

Scala - 修改xml中的嵌套元素

我正在学习scala,我正在寻找更新某个xml中的嵌套节点.我有一些工作,但我想知道它是否是最优雅的方式.

我有一些xml:

val InputXml : Node =
<root>
    <subnode>
        <version>1</version>
    </subnode>
    <contents>
        <version>1</version>
    </contents>
</root>
Run Code Online (Sandbox Code Playgroud)

我想更新版本的节点的子节点,而不是一个在内容.

这是我的功能:

def updateVersion( node : Node ) : Node = 
 {
   def updateElements( seq : Seq[Node]) : Seq[Node] = 
   {
        var subElements = for( subNode <- seq ) yield
        {
            updateVersion( subNode )
        }   
        subElements
   }

   node match
   {
     case <root>{ ch @ _* }</root> =>
     {
        <root>{ updateElements( ch ) }</root>
     }
     case <subnode>{ ch @ _* …
Run Code Online (Sandbox Code Playgroud)

xml scala

37
推荐指数
4
解决办法
1万
查看次数

Scala Regex启用Multiline选项

我正在学习Scala,所以这可能是非常棒的.

我想要一个多行正则表达式.

在Ruby中它将是:

MY_REGEX = /com:Node/m
Run Code Online (Sandbox Code Playgroud)

我的Scala看起来像:

val ScriptNode =  new Regex("""<com:Node>""")
Run Code Online (Sandbox Code Playgroud)

这是我的匹配功能:

def matchNode( value : String ) : Boolean = value match 
{
    case ScriptNode() => System.out.println( "found" + value ); true
    case _ => System.out.println("not found: " + value ) ; false
}
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

matchNode( "<root>\n<com:Node>\n</root>" ) // doesn't work
matchNode( "<com:Node>" ) // works
Run Code Online (Sandbox Code Playgroud)

我试过了:

val ScriptNode =  new Regex("""<com:Node>?m""")
Run Code Online (Sandbox Code Playgroud)

我真的想避免使用java.util.regex.Pattern.任何提示非常感谢.

regex scala multiline

21
推荐指数
3
解决办法
1万
查看次数

使用scala查找具有与特定值匹配的属性的所有节点

我在Nabble上看到了以下示例,其目标是返回包含属性为X且包含值Y的属性的所有节点:

//find all nodes with an attribute "class" that contains the value "test"
val xml = XML.loadString( """<div>
<span class="test">hello</span>
<div class="test"><p>hello</p></div>
</div>""" )

def attributeEquals(name: String, value: String)(node: Node) = 
{ 
    node.attribute(name).filter(_==value).isDefined
}

val testResults = (xml \\ "_").filter(attributeEquals("class","test")) 
//prints: ArrayBuffer(
//<span class="test">hello</span>, 
//<div class="test"><p>hello</p></div>
//) 
println("testResults: " + testResults ) 
Run Code Online (Sandbox Code Playgroud)

作为对此的扩展,将如何执行以下操作:查找包含任何包含值Y的属性的所有节点:

//find all nodes with any attribute that contains the value "test"
val xml = XML.loadString( """<div>
 <span class="test">hello</span>
 <div id="test"><p>hello</p></div>
 <random any="test"/></div>""" )
 //should return: …
Run Code Online (Sandbox Code Playgroud)

xml parsing scala

11
推荐指数
1
解决办法
1万
查看次数

将buttonStyle应用为主题不起作用,但如果直接应用于按钮则会起作用

我正在学习有关创建自定义按钮的教程.如果我直接将该样式应用于该按钮它可以工作,但如果我使用android:buttonStyle它将样式应用于主题则不起作用.

示例 - 以下是应用了按钮样式的样式xml:values/styles.xml

<resources>
    <style name="MyTheme" parent="android:Theme.Light">
       <!-- the button gets styled but is no longer clickable 
            if i do it like this -->
       <item name="android:buttonStyle">@style/ButtonText</item>
    </style>

    <style name="ButtonText">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textColor">#ffffff</item>
        <item name="android:background">@drawable/ruddy_orange_button</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

绘制/ ruddy_orange_button.xml:

    <item android:state_pressed="true">
        <shape>
            <solid android:color="#70c656" />
            <stroke android:width="1dp" android:color="#53933f" />
            <corners android:radius="3dp" />
            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape>
    </item>
   <item>
        <shape>
            <gradient android:angle="270" android:endColor="#fd4d4d" android:startColor="#f24b4b" />
            <stroke android:width="1dp" android:color="#f04a4a" />
            <corners android:radius="4dp" …
Run Code Online (Sandbox Code Playgroud)

android android-styles

6
推荐指数
2
解决办法
4204
查看次数

Scala - 从xml中完全删除命名空间

我有一些xml:

<item name="ed" test="true"
  xmlns="http://www.somenamespace.com"
  xmlns:xsi="http://www.somenamespace.com/XMLSchema-instance">
  <blah>
     <node>value</node>
  </blah>
</item>
Run Code Online (Sandbox Code Playgroud)

我想通过这个xml并完全删除所有命名空间,无论它们在哪里.我如何使用Scala执行此操作?

 <item name="ed" test="true">
  <blah>
     <node>value</node>
  </blah>
</item>
Run Code Online (Sandbox Code Playgroud)

我一直在看RuleTransform和复制属性等,但我可以删除命名空间或删除属性但不删除命名空间并保留属性.

xml scala

5
推荐指数
1
解决办法
1569
查看次数

使用 Future[Validation[E,A]] 进行理解

我想更改一些返回的 api:Validation[E,A],以异步方式,所以理想情况下:Future[Validation[E,A]]。不过我希望能够用于理解这些。

考虑以下示例:

import scala.concurrent.{Await, ExecutionContext, Future}
import ExecutionContext.Implicits.global
import scala.concurrent.duration._
import scalaz.{Failure, Success, Validation}

def getName : Future[Validation[Int,String]] = {
  Future{
    Success("ed")
  }
}

def useName(name:String) : Future[Validation[Int,String]] = {
  Future{
    Success(s"hi $name")
  }
}


val name : Future[Validation[Int,String]] = getName.flatMap{ v =>
  v match {
    case Success(name) => useName(name)
    case Failure(e) => Future(Failure(e))
  }
}

Await.result(name, 1.second)
Run Code Online (Sandbox Code Playgroud)

为了获得name,我需要从验证中获取成功的值,并useName使用该值进行调用。

有没有办法我可以按照这些思路做一些事情:

val name : Future[Validation[Int,String]] = for{
  n <- getName
  b <- …
Run Code Online (Sandbox Code Playgroud)

scala scalaz

3
推荐指数
1
解决办法
813
查看次数

如何在命令行上给出-jvm-debug时在test中设置fork?

如果项目在调试模式下运行,是否有办法有条件地禁用分叉:

sbt -jvm-debug 9999
Run Code Online (Sandbox Code Playgroud)

然后在我的构建中:

fork in Test := { 
  //find a key that lets me know if debugging in set up
  !isDebugging.value
}
Run Code Online (Sandbox Code Playgroud)

sbt

2
推荐指数
1
解决办法
1286
查看次数

标签 统计

scala ×5

xml ×3

android ×1

android-styles ×1

multiline ×1

parsing ×1

regex ×1

sbt ×1

scalaz ×1