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 />"