- ベストアンサー
URLの書き方
MS SQLServerのテーブルに格納されている商品在庫データを、 xmlを使ってWebで見れるようにしております。 が、 ちょっと気になることがあるので質問させてください。 その在庫ページを見るのに、URLを ttp://○○○○.com/data/templete/getzaiko.xml?contenttype=text/html のように指定しているのですが、 ”?contenttype=text/html”の部分がURLに含まれるのがどうも気に入らないのです。。。 この部分をxmlファイル内に記述することはできないのでしょうか? 以下getzaiko.xmlの内容 ------------------------------------ <?xml version ='1.0' encoding='UTF-8'?> <root xmlns:sql='urn:schemas-microsoft-com:xml-sql' sql:xsl='sl_zaiko.xsl'> <sql:header> <sql:param name="userID">0</sql:param> <sql:param name="pwd">0</sql:param> <sql:param name="category">0</sql:param> <sql:param name="searchword"></sql:param> </sql:header> <sql:query> EXECUTE proc_Zaiko @userID, @pwd, @category, @searchword </sql:query> </root> ------------------------------------ ※proc_Zaiko はストアドプロシージャです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
原因についてははっきり特定できます。 HTTPのデフォルトのエンコーディングは"us-ascii"で,XMLやHTMLで表現したエンコーディングルールが無視されるわけです。 XML宣言やHTMLの<meta>でエンコーディングルールを明記すれば,指定したエンコーディングで送信されるように勘違いされる方が多いのですが,優先されるのはHTTPヘッダ情報Content-Typeフィールドの値です。 zutさんがお調べになった限りでは,HTTPヘッダを出力するには,”?contenttype=text/html”をURLに付けないと無理のようですね。 ということで,HTTPヘッダをコントロールしない限りは,スタイルシートをいくら変更してもうまくいきません。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
'http://www.w3.org/TR/html4/loose.dtd' に違反するようなHTMLを作っているということですかね~ 例えば、xsl:outputを単純にして <xsl:output method="html" version="4.01" encoding="Shift_JIS" /> とかにしたらどうなりますか
お礼
色々やってみましたが、ダメでした。 やはり”?contenttype=text/html”が無いと、htmlとして解釈しないようです。 HTTPヘッダを出力してやればいいのでしょうが、 SQLServer2000のXML機能だけでやるには、”?contenttype=text/html”をURLに付けないと無理っぽいです。 もうちょっとだけ悩んではみますが…。 <title>~</title>消したときのエラーメッセージ -------------------------- XML ページを表示できません XSL スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。 ────────────────────────────── 終了タグ 'head' が開始タグ 'link' と一致していません。リソース 'http://○○○○.com/data/templete/getzaiko.xml' の実行エラーです。ライン 5、位置 3 </head> --^ -------------------------- このときの'sl_zaiko.xsl' -------------------------- <?xml version ='1.0' encoding='UTF-8'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" version="4.01" encoding="Shift_JIS" /> <xsl:template match="/"> <html> <head> <link rel="stylesheet" href="../../○○○.css" type="text/css" /> </head> <body> … … … --------------------------
補足
ご回答ありがとうございます。 <xsl:output method="html" version="4.01" encoding="Shift_JIS" /> にしてみましたところ以下のエラーメッセージが表示されました。 エラーメッセージ ---------------------------- XML ページを表示できません XSL スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。 ────────────────────────────── テキストの内容に無効な文字が見つかりました。 リソース 'http://○○○○.com/data/templete/getzaiko.xml'の実行エラーです。 ライン 4、位置 8 <title> ---------------------------- <title>が無効??? ちょっと<title>~</title>を消してみますね。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
MS SQLServer って使ったことはないのでトンチンカンだったらすみません。 XSL('sl_zaiko.xsl')で出力を作っていると思うので xslの先頭部分で <xsl:output method="html" /> を指定すればいいように思います。 勘違いしてたらすみません。
補足
その指定はしてあるのですが、 URLに、”?contenttype=text/html”を付けない場合 以下のエラーメッセージがブラウザに表示されます。 付けるとまともに表示されるので、URL以外の箇所に記述できればよいのですが… エラーメッセージ -------------------------------- XML ページを表示できません スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。 '>' 文字が必要です。リソース 'http://www.w3.org/TR/html4/loose.dtd' の実行エラーです。ライン 31、位置 3 -- Typical usage: --^ -------------------------------- 他のxmlを指定した場合も必ず”ライン 31、位置 3”でエラーになります。 xslの記述内容的には'>'が足りない箇所は無いので何が悪いのかよくわかりません。 以下 'sl_zaiko.xsl' の先頭部分 -------------------------------- <?xml version ='1.0' encoding='UTF-8'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="Shift_JIS" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html4/loose.dtd"/> … … … --------------------------------
お礼
助言ありがとうございました。