Skip to content

Commit

Permalink
Remove some dead code. Fix bug in StAX parser reading elements with b…
Browse files Browse the repository at this point in the history
…oth namespace declarations and attributes
  • Loading branch information
josharnold52 committed Jul 25, 2011
1 parent 81ba0b1 commit edea99b
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 11 deletions.
7 changes: 0 additions & 7 deletions src/main/scala/com/codecommit/antixml/NodeSeqSAXHandler.scala
Expand Up @@ -86,11 +86,6 @@ class NodeSeqSAXHandler extends DefaultHandler2 {

// need to do this early since SAXAttributes objects may be reused
val map = (0 until attrs.getLength).foldLeft(Attributes()) { (map, i) =>
val ns = {
val back = attrs.getURI(i)
if (back == "") None else Some(back)
}

val localName = attrs.getLocalName(i)

val prefix = {
Expand All @@ -108,8 +103,6 @@ class NodeSeqSAXHandler extends DefaultHandler2 {
else
Some(qName.substring(0, qName.length - localName.length - 1))

val ns = if (uri == "") None else Some(uri)

Elem(prefix, localName, map, scopes.headOption getOrElse Map(), children)
}
}
Expand Down
7 changes: 3 additions & 4 deletions src/main/scala/com/codecommit/antixml/StAXParser.scala
Expand Up @@ -51,7 +51,7 @@ class StAXParser extends XMLParser {
override def fromString(xml: String): Elem =
fromReader(new StringReader(xml))

private case class ElemBuilder(ns: Option[String], name: String, prefix: Option[String], attrs: Attributes)
private case class ElemBuilder(name: String, prefix: Option[String], attrs: Attributes)

private def fromStreamSource(source: StreamSource): Elem = {
import XMLStreamConstants.{CDATA => CDATAFlag, CHARACTERS, COMMENT, DTD, END_ELEMENT, END_DOCUMENT, PROCESSING_INSTRUCTION, START_ELEMENT, ENTITY_REFERENCE, NAMESPACE}
Expand Down Expand Up @@ -102,9 +102,9 @@ class StAXParser extends XMLParser {
i = i + 1
}
prefixMapping ::= prefixes
i = 0
var attrs = Attributes()
while (i < xmlReader.getAttributeCount) {
val ns = Option(xmlReader.getAttributeNamespace(i))
val localName = xmlReader.getAttributeLocalName(i)
val prefix = {
val back = xmlReader.getAttributePrefix(i)
Expand All @@ -113,9 +113,8 @@ class StAXParser extends XMLParser {
attrs = attrs + (QName(prefix, localName) -> xmlReader.getAttributeValue(i))
i = i + 1
}
val uri = xmlReader.getNamespaceURI
val prefix = xmlReader.getPrefix
elems ::= ElemBuilder(if (uri == null || uri == "") None else Some(uri), xmlReader.getLocalName,
elems ::= ElemBuilder(xmlReader.getLocalName,
if (prefix == null || prefix == "") None else Some(prefix), attrs)
results ::= VectorCase.newBuilder[Node]
}
Expand Down
5 changes: 5 additions & 0 deletions src/test/scala/com/codecommit/antixml/SAXSpecs.scala
Expand Up @@ -49,5 +49,10 @@ class SAXSpecs extends Specification {
"parse a String and generate an Elem" in {
SAXParser.fromString("<p:a xmlns:p='ns'>hi<b attr='value' /> there</p:a>") mustEqual Elem(Some("p"), "a", Attributes(), Map("p"->"ns"), Group(Text("hi"), Elem(None, "b", Attributes("attr" -> "value"), Map("p"->"ns"), Group()), Text(" there")))
}

"parse a simpleString with both a namespace and an attribute" in {
SAXParser.fromString("<a xmlns='urn:a' key='val' />") mustEqual Elem(None, "a", Attributes("key"->"val"), Map("" -> "urn:a"), Group())
}

}
}
4 changes: 4 additions & 0 deletions src/test/scala/com/codecommit/antixml/StAXSpecs.scala
Expand Up @@ -42,6 +42,10 @@ class StAXSpecs extends Specification {
"parse a simpleString with an non-prefixed namespace" in {
StAXParser.fromString("<a xmlns='urn:a'/>") mustEqual Elem(None, "a", Attributes(), Map("" -> "urn:a"), Group())
}

"parse a simpleString with both a namespace and an attribute" in {
StAXParser.fromString("<a xmlns='urn:a' key='val' />") mustEqual Elem(None, "a", Attributes("key"->"val"), Map("" -> "urn:a"), Group())
}

}
}

0 comments on commit edea99b

Please sign in to comment.