XML

ScalaではXMLリテラルを記述することが可能です。Xitrumではこの機能をテンプレートエンジンとして利用しています。

  • ScalaコンパイラによるXMLシンタックスチェックは、Viewの型安全につながります。
  • ScalaによるXMLの自動的なエスケープは、XSS 攻撃を防ぎます。

いくつかのTipsを示します。

XMLのアンエスケープ

scala.xml.Unparsed を使用する場合:

import scala.xml.Unparsed

<script>
  {Unparsed("if (1 < 2) alert('Xitrum rocks');")}
</script>

<xml:unparsed> を使用する場合:

<script>
  <xml:unparsed>
    if (1 < 2) alert('Xitrum rocks');
  </xml:unparsed>
</script>

<xml:unparsed> は実際の出力には含まれません:

<script>
  if (1 < 2) alert('Xitrum rocks');
</script>

XMLエレメントのグループ化

<div id="header">
  {if (loggedIn)
    <xml:group>
      <b>{username}</b>
      <a href={url[LogoutAction]}>Logout</a>
    </xml:group>
  else
    <xml:group>
      <a href={url[LoginAction]}>Login</a>
      <a href={url[RegisterAction]}>Register</a>
    </xml:group>}
</div>

<xml:group> は実際の出力には含まれません。ユーザーがログイン状態の場合、以下のように出力されます:

<div id="header">
  <b>My username</b>
  <a href="/login">Logout</a>
</div>

XHTMLの描画

XitrumはviewとレイアウトはXHTMLとして出力します。 レアケースではありますが、もしあなたが直接、出力内容を定義する場合、以下のコードが示す内容に注意してください。

import scala.xml.Xhtml

val br = <br />
br.toString            // => <br></br>, この場合ブラウザによってはbrタグが2つあると認識されることがあります。
Xhtml.toXhtml(<br />)  // => "<br />"