Skip to content

Commit d6023d6

Browse files
author
Alex Simkin
committed
Scala XML: Lazy sequences.
1 parent 00fcee5 commit d6023d6

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
.gradle/
22
.idea/
3+
.settings/
4+
bin/
35
out/
46
build/
7+
.project
8+
.classpath
59
*.iml

xpath-to-xml-scala/src/main/scala/com/github/simy4/xpath/scala/navigator/ScalaXmlNavigator.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ class ScalaXmlNavigator(xml: Root) extends Navigator[ScalaXmlNode] {
2626
val node = e.node
2727
val children = node.child
2828
val idx = children.size
29-
val newElem = Elem(Some(element.getPrefix).filter(_.nonEmpty).orNull, element.getLocalPart, Null, node.scope,
30-
minimizeEmpty = true)
29+
val newElem = element.getPrefix match {
30+
case pre if pre.nonEmpty => Elem(pre, element.getLocalPart, Null, node.scope, minimizeEmpty = true)
31+
case _ => Elem(null, element.getLocalPart, Null, node.scope, minimizeEmpty = true)
32+
}
3133
e.node = node.copy(child = children :+ newElem)
3234
new Element(newElem, idx, e)
3335
case _ =>
@@ -56,7 +58,7 @@ class ScalaXmlNavigator(xml: Root) extends Navigator[ScalaXmlNode] {
5658
val parentNode = e.parent.node
5759
e.parent.node = parentNode.copy(child = parentNode.child patch (idx, Seq(copy, toCopy), 1))
5860
e.index += 1
59-
case _ =>
61+
case _ =>
6062
throw new XmlBuilderException(s"Unable to prepend copy to $node")
6163
}
6264
override def remove(node: ScalaXmlNode): Unit = node match {

xpath-to-xml-scala/src/main/scala/com/github/simy4/xpath/scala/navigator/scalaXmlNodes.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,16 @@ final class Root(override var node: Elem) extends Parent {
3636
}
3737

3838
private[navigator] final class Element(private var _node: Elem, var index: Int,
39-
override val parent: Parent) extends Parent {
39+
override val parent: Parent) extends Parent {
4040
override def getName: QName = node match {
4141
case prefixed if null != prefixed.prefix => new QName(prefixed.namespace, prefixed.label, prefixed.prefix)
4242
case simple => new QName(simple.label)
4343
}
4444
override def getText: String = node.child.collect { case Text(t) => t }.mkString
4545
override def elements: Iterable[Element] = for {
46-
(n, i) <- _node.child.zipWithIndex if !n.isAtom
46+
(n, i) <- _node.child.view.zipWithIndex if !n.isAtom
4747
} yield new Element(n.asInstanceOf[Elem], i, this)
48-
override def attributes: Iterable[Attribute] = _node.attributes map (new Attribute(_, this))
48+
override def attributes: Iterable[Attribute] = _node.attributes.view map (new Attribute(_, this))
4949
override def node: Elem = _node
5050
override def node_=(elem: Elem): Unit = {
5151
parent.node = parent match {

0 commit comments

Comments
 (0)