いちばん失敗した人決定戦

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で変換しようとすると、うまくいきません。名前空間あたりが怪しいと思うのですが、どうすればうまく変換できるでしょうか?

A 回答 (1件)

俺の過去の回答から


http://oshiete1.goo.ne.jp/qa3362718.html

ソースコードから察してください
(ただ、教えてgooの仕様で,URIっぽい文字列の前後に​をシステムが埋め込むため,
置換するなり,自分で書き直すなりしないと動きません)

実際には#2において,
<xsl:value-of select="ItemAttributes/Title" />
は上部の記述と合致していません。XPathに接頭辞つけないと
(#1のコードは上記の点を直せば正しい)

オマケ
http://okwave.jp/qa3477885.html

この回答への補足

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

補足日時:2008/02/03 12:48
    • good
    • 0
この回答へのお礼

ググっていたら、なんとか力技で、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>
------
上記のようにすることで、出力はできるようになりましたが、スマートな解決方法ではありません。もっとスマートな解決方法はないでしょうか?

お礼日時:2008/02/03 19:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!