2013-05-16 2 views
2

스칼라 xml 이벤트 리더에서 이상한 동작을 발견했습니다. 이 &의 특별한 XML 인코딩을 포함하고 있기 때문에XMLEventReader는 단일 태그에 대해 두 개의 EvText 이벤트를 생성합니다.

<page> 
    <title>AT&amp;T Bell Labs</title> 
    <ns>0</ns> 
    <id>63739</id> 
    </page> 

그것은 제목 EvText 이벤트에 생성이 같은 XML하십시오. 위의 코드에 대한 결과

case EvText(text) => 
{ 
    println(text) 
} 

, 내가 출력을

AT 
T Bell Labs 

대신 AT&amp;T Bell Labs를 얻을.

답변

3

엔티티 참조 이벤트는 자체 생성자 EvEntityRef으로 표시됩니다 (일반적으로 정확하게 기억하는 경우 연속적인 문자는 EvText 이벤트로 표시됩니다.). 이 (내가 생각하는 첫 번째 텍스트가 아닌 이벤트를 화상 것을

def readText(reader: Iterator[XMLEvent]): String = { 
    val builder = new StringBuilder 
    var current = reader.next 
    while (
    current match { 
     case EvText(text)  => builder.append(text); true 
     case EvEntityRef("amp") => builder.append("&"); true 
     case EvEntityRef("lt") => builder.append("<"); true 
     case EvEntityRef("gt") => builder.append(">"); true 
     case _ => false 
    } 
) current = reader.next 
    builder.toString 
} 

주 -이 알고 : 여기

내가 텍스트 이벤트의 두 종류를 처리하기 위해 과거에 어떤 시점에서 쓴 못생긴 필수 코드입니다 다시 읽을 필요가없는 코드입니다.) 일반적으로 불쾌하지만, 이런 종류의 문제를 어떻게 처리 할 수 ​​있는지에 대한 아이디어를 제공해야합니다.


관련 문제