ドはまり。
変換元XMLでネームスペースを
<?xml version="1.0" encoding="UTF-8"?> <ac:confluence xmlns="http://www.w3.org/1999/xhtml" xmlns:ac="http://www.atlassian.com/schema/confluence/4/ac/" xmlns:ri="http://www.atlassian.com/schema/confluence/4/ri/" >
ってやってて、XSLで
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:ac="http://www.atlassian.com/schema/confluence/4/ac/" xmlns:ri="http://www.atlassian.com/schema/confluence/4/ri/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
ってしてると、XPath表現でどうやっても普通のXHTML系のタグが引っかからない。
XSLT でありがちな失敗を避けるために によると、
XPath で名前空間が設定された要素にアクセスするには、該当する名前空間に接頭辞を定義する必要があります。例えば、サンプル XHTML 文書のタイトルにアクセスするには、XHTML 名前空間に接頭辞を定義し、その接頭辞をすべての XPath ステップで使用します。(略)
ここでも同じく、XPath 式での接頭辞には十分な注意が必要です。1 つでも接頭辞が欠けていると、誤った結果になってしまいます。
な、なんだってー!!!
ということで、XMLではデフォルトだった「http://www.w3.org/1999/xhtml」のネームスペースにも新たに接頭辞を振ってやる必要がある。
こんな感じで「h」プレフィクスを使用。
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:h="http://www.w3.org/1999/xhtml"
そして、XPath表現では、
<xsl:template match="h:table"> <table>
という感じ。「XML上のデフォルトネームスペース=XSL上のデフォルトネームスペース」としていてもそれを暗黙で一致させてくれないんですね。