FreemarkerのXMLパーサとネームスペース(ns_prefixes)について
例えば、以下のようにネームスペースが付けられているような、
XMLをFreemarkerのテンプレートでパースして表示しようとすると、
若干躓くことになる。
<?xml version="1.0" encoding="UTF-8" ?>
<root xmlns="http://hogehoge.com/xmlns">
<key>hogehoge</key>
<value>hogehoge</value>
</root>
というのも、以下のようなコードでは値が取得できないのだ。
key=${doc.root.key}<br/>
value=${doc.root.value}
<#-- docはNodeModel -->
これは、ネームスペースを使っているためである。
ので、取得するにはこのように書くことになる。
<#ftl ns_prefixes={"xmlns": "http://hogehoge.com/xmlns"}>
<#-- 先頭に書くのがいいっぽい。-->
<#assign root = doc["xmlns:root"] />
key = ${root["xmlns:key"]}<br/>
value = ${root["xmlns:value"]}
というような感じで、エレメントを取得するたびにネームスペース
を付けてあげる必要がある。
これでは、面倒くさい。
Freemarkerでは、”D”がデフォルトとして割り当てられているので、
<#ftl ns_prefixes={"D": "http://hogehoge.com/xmlns"}>
と、宣言してあげると、一番最初のコードで各値を取得することが
できるようになる。
というメモ。
Popularity: 18% [?]