![]() |
1
11
我认为最初的逻辑是好的。 这是同一个代码(我敢说吗?)更像鳞片的味道:
它看起来更紧凑(但实际上是一样的:)
如果需要,也可以去掉updateElements。您希望将updateVersion应用于序列的所有元素。那就是 map method . 有了它,你就可以重写这行了
具有
由于更新版本只接受一个参数,我99%确信您可以忽略它并写入:
并以:
你怎么认为? |
![]() |
2
54
一直以来,没有人给出最恰当的答案!不过,现在我已经知道了,下面是我对它的新看法:
现在,有几个解释。班级
下一堂课
这两个类都源自
这里我们使用两个级别
提取器
还要注意提取器的最后一个参数是
这段代码比其他的建议要大,但是它的优点是对XML结构的了解要比其他的少得多。它会更改调用的任何元素
而且…好吧,如果您有许多转换要做,递归模式匹配会很快变得不易实现。使用
|
![]() |
3
13
您可以使用Lift的CSS选择器转换并写入:
见 http://stable.simply.liftweb.net/#sec:CSS-Selector-Transforms |
![]() |
4
6
从那以后,我学到了更多,并在另一个答案中提出了我认为是一个更好的解决方案。我还修复了这个,因为我注意到我没有解释
谢谢你的提问!在处理XML时,我学到了一些很酷的东西。以下是您想要的:
现在,解释一下。第一个和最后一个案例陈述应该是显而易见的。最后一个方法是捕获XML中那些不是元素的部分。或者,换句话说,文本。但是,在第一条语句中,要注意针对标志的测试是否
第二和第三个case语句将对对象elem使用模式匹配器。这将一个元素分解为
全部的
它的组成部分。最后一个参数“children@\u*”将使children与任何内容的列表相匹配。或者更具体地说,是seq[节点]。然后我们用提取的部分重新构造元素,但将seq[node]传递给updateNodes,执行递归步骤。如果我们与元素匹配
在最后一行中,我们使用node.thesq从node生成一个seq[节点],并且(0)得到作为结果返回的seq[节点]的第一个元素。因为updateNodes本质上是一个映射函数(用于…将yield转换为map),我们知道结果只有一个元素。我们通过了
有一种稍有不同的方法,它更强大,但更冗长和晦涩:
这个版本允许您更改任何“版本”标记,不管它是前缀、属性和作用域。 |
![]() |
5
3
Scales Xml 提供用于“就地”编辑的工具。当然,这一切都是不变的,但下面是按比例计算的解决方案:
类似xpath的语法是一个scales签名特性,
|
![]() |
6
1
一种方法是使用透镜(例如scalaz)。见 http://arosien.github.io/scalaz-base-talk-201208/#slide35 为了一个非常清晰的陈述。 |
![]() |
7
-2
我真的不知道怎样才能做到优雅。fwiw,我将采用另一种方法:对您正在处理的信息使用自定义模型类,并对其进行XML和XML之间的转换。你可能会发现它是处理数据的更好方法,而且它更简洁。 不过,有一种直接使用XML的好方法,我想看看。 |
![]() |
davidzxc574 · 将字符串缩放为字符 2 年前 |
![]() |
yic_l · 什么是“!”在这个函数中是什么意思? 2 年前 |
![]() |
Jelly · Scala:用于理解递归未来 2 年前 |
![]() |
bbgghh · 在scala中连接两个列表时如何处理不匹配的键 2 年前 |
![]() |
Iheb Mar · 卡夫卡制作人/消费者粉碎每一秒的API调用 2 年前 |
![]() |
B. Bal · 在Scala中重用类成员 2 年前 |