小编sva*_*ens的帖子

XPath 1.0独占或节点集表达式

我需要的东西似乎与其他类似标题的文章不太匹配.

我需要,使用Xpath 1,能够以该顺序依次获得节点a或节点b.也就是说,节点a如果存在,否则节点b.

一个xpath表达式,例如:

expression | expression

在两者都存在的情况下,我会得到两个.那不是我想要的.

我可以去:

(expression | expression)[last()]

事实上,我确实需要我(在我的情况下),但似乎有点低效,因为它将在选择最后一个结果之前评估表达式的两侧.我希望一旦左侧成功,表达将停止工作.

一个更具体的XML示例

<one>
   <two>
     <three>hello</three>
     <four>bye</four>
   </two>
  <blahfive>again</blahfive>
</one>
Run Code Online (Sandbox Code Playgroud)

和工作的xpath(但效率低下):

(/one/*[starts-with(local-name(.), 'blah')] | .)[last()]

为了清楚起见,我想抓住以'blah'开头的'one'的直接子节点.但是,如果它不存在,我只想要当前节点.如果'blah'节点确实存在,我不想要当前节点.

有没有更有效的方法来实现这一目标?

xpath

8
推荐指数
1
解决办法
428
查看次数

可以使用Scala的Option flatMap方法更简洁吗?

我无疑是Scala的新手,我在许多Scala示例中遇到的语法糖问题.它通常会产生一个非常简洁的陈述,但老实说到目前为止(对我而言)有点难以理解.

因此,我希望将Option类(安全解除引用)的典型用法作为开始理解的好地方,例如,在我看到的特定示例中使用下划线.

我发现了一篇非常好的文章,展示了使用Option来避免null的情况.

https://medium.com/@sinisalouc/demystifying-the-monad-in-scala-cc716bb6f534#.fhrljf7nl

他描述了一个用途:

trait User {
  val child: Option[User]
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您也可以将这些函数编写为就地lambda函数,而不是先验地定义它们.然后代码变为:

val result = UserService.loadUser("mike")
  .flatMap(user => user.child)
  .flatMap(user => user.child)
Run Code Online (Sandbox Code Playgroud)

那看起来很棒!也许不像人们在groovy中那样简洁,但也不错.

所以我想我会尝试将它应用到我想要解决的案例中.

我有一种类型Person,其中a的存在Person是可选的,但如果我们有一个人,他的属性是有保证的.出于这个原因,没有使用的Option的内型Person类型本身.

Person具有PID它的类型的Id.该Id类型包括两种String类型; Id-Type和Id-Value.

我使用Scala控制台测试以下内容:

class Id(val idCode : String, val idVal : String)

class Person(val pid : Id, val name : String)

val anId: Id = new Id("Passport_number", "12345")

val person: Person = new Person(anId, "Sean")

val operson : …
Run Code Online (Sandbox Code Playgroud)

scala optional flatmap

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

标签 统计

flatmap ×1

optional ×1

scala ×1

xpath ×1