我需要的东西似乎与其他类似标题的文章不太匹配.
我需要,使用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'节点确实存在,我不想要当前节点.
有没有更有效的方法来实现这一目标?
我无疑是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)