2

scala xml イベント リーダーで奇妙な動作を見つけました。このような xml の場合:

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

& の特別な xml エンコーディングが含まれているため、タイトルの EvText イベントが生成されます。

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

上記のコードの結果として、出力が得られます

AT 
 T Bell Labs

の代わりにAT&amp;T Bell Labs

4

1 に答える 1

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
}

これは最初の非テキスト イベントを焼き付けてしまうことに注意してください (これは、二度と読みたくない種類のコードです)。このようなこと。


于 2013-05-16T16:08:18.647 に答える