エンティティ参照イベントは、独自のコンストラクタ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
}
これは最初の非テキスト イベントを焼き付けてしまうことに注意してください (これは、二度と読みたくない種類のコードです)。このようなこと。