• 締切済み

xhtml2.0をhtmlに変換したい

xhtml2.0をhtmlに変換したいと考えています。 ---------------- [ 共通 essay.xsl ] <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" encoding="UTF-8" /> <xsl:template match="/"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title><xsl:value-of select="html/head/title" /></title> </head> <body> <xsl:value-of select="html/head/title" /> </body> </html> </xsl:template> 15 </xsl:stylesheet> ----------------- <例1> [偽物xhtml2.xml] <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="essay.xsl" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 2.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml2.dtd"> <html xml:lang="ja"> <head> <title>偽xhtml2.0</title> <meta property="keywords" xml:lang="ja">xhtml2.0</meta> <meta property="dc:dreated" content="2008-01-06" /> </head> <body> <h>テスト</h> <p>偽xhtml2.0</p> </body> </html> --------------------------- <結果> 「偽xhtml2.0」と表示される ------------------------ 上記のように、xmlns無しで書いた、偽物xml2.0は変換できるのですが、下記の ------------------------------ <正式xhtml2.xml> <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="essay.xsl" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 2.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml2.dtd"> <html xmlns="http://www.w3.org/2002/06/xhtml2/" xml:lang="en" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2002/06/xhtml2/ http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" > <head> <title>正式xhtml2.0</title> <meta property="keywords" xml:lang="ja">xhtml2.0</meta> <meta property="dc:dreated" content="2008-01-06" /> </head> <body> <h>テスト</h> <p>正式xhtml2.0</p> </body> </html> ------ 正式な形のxhtml2.0を共通xsltで変換しようとすると、うまくいきません。名前空間あたりが怪しいと思うのですが、どうすればうまく変換できるでしょうか?

みんなの回答

回答No.1

俺の過去の回答から http://oshiete1.goo.ne.jp/qa3362718.html ソースコードから察してください (ただ、教えてgooの仕様で,URIっぽい文字列の前後に​をシステムが埋め込むため, 置換するなり,自分で書き直すなりしないと動きません) 実際には#2において, <xsl:value-of select="ItemAttributes/Title" /> は上部の記述と合致していません。XPathに接頭辞つけないと (#1のコードは上記の点を直せば正しい) オマケ http://okwave.jp/qa3477885.html

heysos
質問者

お礼

ググっていたら、なんとか力技で、xsltを ----- <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" encoding="UTF-8" /> <xsl:template match="/"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title><xsl:value-of select="*[local-name()='html']/*[local-name()='head']/*[local-name()='tit le']" /></title> </head> <body> <xsl:value-of select="*[local-name()='html']/*[local-name()='head']/*[local-name()='title']" / > </body> </html> </xsl:template> </xsl:stylesheet> ------ 上記のようにすることで、出力はできるようになりましたが、スマートな解決方法ではありません。もっとスマートな解決方法はないでしょうか?

heysos
質問者

補足

すいません。解答を見ながらぐぐってみたんですが、いまだによく分かりません。 「xPathにはデフォルトの名前空間を取得する手段がない」ということは理解できましたが、「それでは、どうやって解決するか」が分かりません。もう少しヒントをいただけないでしょうか?

関連するQ&A