在这个问题中,提问者想要像这样转换文档:
<text>
The capitals of Bolivia are <blank/> and <blank/>.
</text>
进入这个:
<text>
The capitals of Bolivia are <input name="blank.1"> and <input name="blank.2">.
</text>
正如我在那里的回答中指出的那样,Anti-XML的拉链为这个问题提供了一个干净的解决方案。例如,以下内容可用于重命名空白元素:
import com.codecommit.antixml._
val q = <text>The capitals of Bolivia are <blank/> and <blank/>.</text>.convert
(q \\ "blank").map(_.copy(name = "input")).unselect
不幸的是,以下方法不起作用:
(q \\ "blank").zipWithIndex.map { case (el, i) => el.copy(
name = "input",
attrs = Attributes("name" -> "blank.%d".format(i + 1))
)}.unselect
因为当然,一旦我们zipWithIndex
-ed zipper,我们就不再有 zipper,只是IndexedSeq
- 我们不能有 a Zipper[(Node, Int)]
,因为定义是trait Zipper[+A <: Node] ...
.
是否有一种干净的方式来使用zip
或zipWithIndex
在 Anti-XML 拉链上,使用 等进行一些其他操作map
,最终得到仍然是拉链的东西?