• ベストアンサー

xml による表示のしかたについて

素人による基礎的な質問で恐縮いたします。 どうしても 今の問題でつまづいてしまつて、中々先に進めないので 意を決してここで質問することにしました。 時間をとらせてすみません。 ■ xml シート <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="01.xsl"?> <map> <pref>北海道 <city>札幌市 <div>中央区</div> <div>東区</div> <div>北区</div> <div>白石区</div> </city> <city>函館市</city> <city>小樽市</city> <city>旭川市</city> <city>室蘭市</city> </pref> <pref>青森県 <city>青森市</city> <city>弘前市</city> <city>八戸市</city> </pref> </map> ■ xsl シート <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>全国地域名</title> </head> <body> <h3 align="left">地域名リスト</h3> <td> <xsl:apply-templates /></td> </body> </html> </xsl:template> <xsl:template match="map"> <xsl:for-each select="pref"> <p><xsl:value-of select="city" /></p> </xsl:for-each> </xsl:template> </xsl:stylesheet> ■ 上記の記述に基づけば 次の表示になってしまいます。 地域名リスト 札幌市 中央区 東区 北区 白石区 青森市 ■私が望んでいる表示は下記のようなものです。 どのように xslシートを 書いたら下記のように表示できるでしょぅか。ひじょうに基礎的なところで躓いてしまっております。 よろしくご教授お願いいたします。 地域名リスト 札幌市 中央区 東区 北区 白石区 函館市 小樽市 旭川市 室蘭市 青森市 青森市 弘前市 八戸市

  • XML
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

><xsl:for-each select="pref"> ><p><xsl:value-of select="city" /></p> ></xsl:for-each> よーーーーーく 見てごらん for-eachの 繰り返す回数の基準は"pref" そしてその中で出力してる部分は1回のvalue-of(first-child) でも希望するのは全てのcityの出力。

tonbeisan
質問者

お礼

ありがとうございます。 おかげさまで 有効なヒントになりました。なんとか 壁を突破できそうです。  やっと ロケーションパスに 行き着きました。

その他の回答 (1)

回答No.2

関心カテゴリに「英語」が入っているので, 読んでもらえばわかるということで細かい解説は省く。 http://www.w3.org/TR/xslt#value-of >The xsl:value-of element is instantiated to create a text node in the result tree. The required select attribute is an expression; this expression is evaluated and the resulting object is converted to a string as if by a call to the string function. http://www.w3.org/TR/xpath#function-string The string function converts an object to a string as follows: * A node-set is converted to a string by returning the string-value of the node in the node-set 【that is first in document order】. If the node-set is empty, an empty string is returned. http://www.w3.org/TR/xslt#section-Applying-Template-Rules >5.4 Applying Template Rules A select attribute can be used to process nodes selected by an expression instead of processing all children. The value of the select attribute is an expression. The expression must evaluate to a node-set. The selected set of nodes is processed in document order, unless a sorting specification is present (see [10 Sorting]). これと http://www.w3.org/TR/xslt#built-in-rule 5.8 Built-in Template (略) の組み合わせでノードリストに含まれる各ノードのテキストが出力されているのを勘違いしている。 #もちろん,もう一段,xsl:for-eachを入れてもいいわけだけど。 あ、あと、himajin100000としては xsl:output要素が欲しいなー。 HTML/XHTMLは基本的にDOCTYPE宣言必須だし, XHTMLの場合は「XHTML の名前空間宣言」も必要だね。 #もう一つ言うと,個人的にはp要素への書き出しが嫌い。 #dl要素 dt要素 dd要素を駆使して欲しいな~

関連するQ&A

  • XMLの実体参照とXSLT

    次のようなXMLファイルをXSLTで処理したいのですが、&baseの部分がうまく表示できません。 どのようにしたら表示できるでしょうか? ■a.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="a.xsl"?> <!DOCTYPE test [ <!ELEMENT name (#PCDATA)> <!ENTITY base SYSTEM "base.xml"> ]> <test> <name>abc</name> &base; </test> ■base.xml <?xml version="1.0" encoding="UTF-8"?> <base>base</base> ■a.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="xml" encoding="UTF-8" /> <xsl:template match="/"> <xsl:apply-templates select="test" /> <xsl:apply-templates select="base" /> </xsl:template> <xsl:template match="test"> name:<xsl:value-of select="name" /> </xsl:template> <xsl:template match="base"> base:<xsl:value-of select="base" /> </xsl:template> </xsl:stylesheet> □結果 name:abc ※base.xmlの内容を表示できない

    • ベストアンサー
    • XML
  • XSL変換したが画像が表示できません

    下記のXMLの画像データを表示するためXSL変換したが画像が表示できません ちなみに同drに設置しています。  PHOT.XML <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="style.xsl"?> <photos>  <photo url="http://www.kahokanko.com/demo/10.jpg"/>  <photo url="http://www.kahokanko.com/demo/19.jpg"/>  <photo url="http://www.kahokanko.com/demo/31.jpg"/> </photos> STYLE.XSL <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  <xsl:template match="/">  <html>   <head>    <title>サンプル</title>    <link rel="styleSheet" type="text/css" href="./xx.css" />   </head>   <body>    <h1>画像を表示</h1>    <div>     <xsl:apply-templates />    </div>   </body>   </html>  </xsl:template>  <xsl:template match="photo">   <p class="album">    <img>     <xsl:attribute name="src">      <xsl:value-of select="@url" />     </xsl:attribute>    </img>   </p>  </xsl:template> </xsl:stylesheet>

  • PHPでXMLを表示させたときの外部エンティティの挙動に関して

    XML+XSLでHTMLを生成する上で、PHPを経由する場合と、しない場合で、 外部エンティティの挙動が異なっていて悩んでいます。 具体的には、  ・XML+XSL+外部エンティティ → 意図通りHTML生成  ・PHP+XML+XSL+外部エンティティ → 意図通りHTML生成されない(外部エンティティが生成されない) こういうものなのでしょうか? もし、こういう仕様であれば、なにか対応策はあるのでしょうか? ソースと生成されたHTMLは下記の通りです。 【Though.php】 <?php header( 'Content-Type: text/html; charset=UTF-8' ); $xml = new DomDocument(); $xml->load( 'MainData.xml' ); $xsl = new DomDocument(); $xsl->load('Main.xsl'); $processor = new xsltprocessor(); $processor->importStyleSheet($xsl); echo $processor->transformToXML($xml); ?> 【MainData.xml】 <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="Main.xsl" ?> <!DOCTYPE books [ <!ENTITY sub_data SYSTEM "SubData.xml"> ]> <root> <node1>TEST1</node1> <node2>&sub_data;</node2> </root> 【Main.xsl】 <?xml version = "1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <xsl:apply-templates /> </html> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates /> </xsl:copy> </xsl:template> </xsl:stylesheet> 【SubData.xml】 <?xml version="1.0" encoding="utf-8"?> <sub_data>Test2</sub_data> 【XML+XSL+外部エンティティで生成されるHTML(ブラウザで直接MainData.xmlを開いた場合)】 <html><?xml-stylesheet type="text/xsl" href="Main.xsl" ><root><node1>TEST1</node1><node2><sub_data>Test2</sub_data></node2></root></html> 【PHP+XML+XSL+外部エンティティで生成されるHTML(ブラウザでThrough.phpを開いた場合)】 <html> <?xml-stylesheet type="text/xsl" href="Main.xsl" ><root> <node1>TEST1</node1> <node2></node2>    //←node2の中がカラッポになっている。。。 </root> </html> ※生成されたHTMLは、IE8の開発者ツールで確認しています。 XMLやPHPは最近やり始めたのでトンチンカンなことを言ってるかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • XMLの名前空間をXSLから指定する方法

    XML勉強してみて間もない者の質問です・・よろしくです。 XMLで例えば <oyaji:samp xmlns:oyaji="http://sampsampsamp.co.jp"> </oyaji:samp> と宣言したとすると、XSLスタイルシートファイルではどのように oyaji:samp を識別すればいいのでしょうか。 上記で質問内容の分からなかった方のみ以下読んでください・・ 例えば //templating.xsl <?XML宣言?> <xsl:stylesheet xmlns:xsl="スタイルシートURI"> <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template macth="samp"> </xsl:template> </xsl:stylesheet> とあったとすると、sampにはマッチしませんよね。 それをマッチさせる方法を教えてください。

    • ベストアンサー
    • XML
  • うまく表示されない

    XMLを最近覚えたのですが、表示がうまく出来ないので間違ってる箇所を教えて頂けないでしょうか? よろしければどうしたら表示されるのかも教えて頂けると助かります。 元のソース <?xml version="1.0" encoding="SHIFT_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title>***</title> <link rel="stylesheet" type="text/css" href="**.css" /> <link rel="shortcut icon" href="favicon.ico" /> </head> <body> <br /> <h2>***</h2> <h4>***</h4> <table><tr><td width="600"> <div><br /><font size="4" color="blue">***</font> <br />*** </div></td></tr></table> <br /> <a href="../***.html"><img src="back.png" border="0" alt="" /></a> <br /> <br /> </body> </html> ↓変更後 XML <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="taimu1.xsl"?> <taimu> <tai>***</tai> <sab>***</sab> <bunn> <br /><font size="4" color="blue">***</font> <br />*** <br /> </bunn> <gazou> <a href="***.html"><img src="***.png" border="0" alt="" /></a> </gazou> </taimu> ↓変更後 XSL <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title>***</title> <link rel="stylesheet" type="text/css" href="***.css" /> <link rel="shortcut icon" href="favicon.ico" /> </head> <body> <xsl:apply-templates select="tai" /> <xsl:apply-templates select="sabu" /> <xsl:apply-templates select="bun" /> <xsl:apply-templates select="gazou" /> </body> </html> </xsl:template> <xsl:template match="tai"> <h2>***</h2> </xsl:template> <xsl:template match="sabu"> <h4>***</h4> </xsl:template> <xsl:template match="bun"> <table><tr><td width="600"><div> </div></td></tr></table> </xsl:template> <xsl:template match="gazou"> <a href="***.html"><img src="***.png" border="0" alt="" /></a> </xsl:template> </xsl:stylesheet> 大体このように書きました

    • 締切済み
    • XML
  • うまく表示されない・・・

    XML初心者のものです。 以下のXMLをXSLを使用してWebで公開しようと試みてます。が、うまく表示されません。 どこがおかしいのでしょうか? また設置ディレクトリ構成も教えてください。 以下サンプルを示します。 -XMLファイル-(sake1.xml) <?xml version="1.0" encoding="Shift_JIS" ?> <?xml-stylesheet href="sake1.xsl" type="text/xsl" ?> <酒><名前>スーパードライ</名前></酒> -XSLファイル-(sake1.xsl) <?xml version="1.0" encoding="Shift_JIS" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="酒"> <html> <head> <title>酒データ1</title> </head> <body> <p align="center">とりあえず表示してみる。</p> <p><xsl:value-of select="酒" /></p> </body> </html> </xsl:template> </xsl:stylesheet>

    • 締切済み
    • XML
  • XSLで、XMLの空タグを制御したい。

    値がないXML文書に、 <exsample /> こう書かれてしまうものを、 <exsample></exsample> このように出力したいのですが、出来ずでした。 以下は、私のやり方です。 ■ XSL <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xslt"> <xsl:output method="xml" encoding="Shift_JIS" indent="yes" xalan:indent-amount="4"/> <xsl:template match="/"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet> ■ XML <?xml version="1.0" encoding="Shift_JIS"?> <root> <section> <category> <exsample1>value</exsample1> <exsample /> </category> </section> </root> ご教授、よろしくお願いいたします。

    • ベストアンサー
    • XML
  • 複数リンクをしたいのですが表示されない

    複数リンクしたいページがあったので色々試みました こちらのサイトを参考にして http://www6.airnet.ne.jp/manyo/xml/index.html Xlinkの単純リンク・拡張リンクを試したのですがリンクが全くされないで、普通に文字が並んでるように表示されました また http://questionbox.jp.msn.com/qa1821124.html こちらのやり方で試みてもリンクされていない状態でした。 XMLの書き方がまずかったのか、別の理由でリンク表示されないのかわかりませんがどうしたら複数リンクができるでしょうか? 大体こんな感じに書きました ↓XML <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="anime1.xsl"?> <iti> <sait> <name>世界の発展</name> <gai> <link url="http://***">イギリス</link> <link url="http://***">フランス</link> <link url="http://***">イタリア</link> </gai> </sait> ↓XSL <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>テスト</title> </head> <body> <div align="center"> <xsl:apply-templates select="iti" /> </div> </body> </html> </xsl:template> <xsl:template match="iti"> <br /> <br /> <h1>テスト</h1> <xsl:apply-templates select="sait" /> <br /> <br /> </xsl:template> <xsl:template match="sait"> <table border="1" bgcolor="#006fdd" width="700"> <tr> <th><xsl:value-of select="name" /></th> </tr><tr> <td><xsl:value-of select="gai" /></tr> </table> <br /> </xsl:template> <xsl:template match="link" > <a> <xsl:attribute name="href"> <xsl:value-of select="@url" /> </xsl:attribute> <xsl:value-of select="text()" /> </a> </xsl:template> </xsl:stylesheet> どこら辺が間違ってますでしょうか?

    • ベストアンサー
    • XML
  • IEのmsxmlでxmlをcsvに変換

    現在IEにくっついているmsxmlでxmlファイルをcsvに変換させるxslを作成しています。 msxmlでもmsxml3でも動くようなxslファイルを作成したいので ワーキングドラフト仕様のxslの記述を使用しようと思い下記のようなXMLとxslを作成しました <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="CSV.XSL"?> <root> <data> <record> <aaaa>1234</aaaa> <bbbb>5678</bbbb> <cccc>9abc</cccc> <dummy name="ENDRECORD"></dummy> </record> <record> <aaaa>1122</aaaa> <bbbb>3344</bbbb> <cccc>5566</cccc> <dummy name="ENDRECORD"></dummy> </record> </data> </root> xslのposition()が使えないので xmlに <dummy name="ENDRECORD"></dummy> を追加して xslで一件分のデータの終わりを認識させています -csv.xsl- <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" version="1.0"> <xsl:template match="/"> <xsl:apply-templates select="root/data/record"/> </xsl:template> <xsl:template match="root/data/record"> <xsl:for-each select="*"> <xsl:choose> <xsl:when test="./@name[(.='ENDRECORD')]">&#xA;</xsl:when> <xsl:otherwise><xsl:value-of select="."/>,</xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> </xsl:stylesheet> しかし、csvのカンマ編集が以下のようになってしまいます。 1234,5678,9abc, ←最後にカンマが残ってしまう 1122,3344,5566, どなたかワーキングドラフト仕様でも勧告後の仕様でも動くような、csvに変換するxslを作成された方はいませんでしょうか。

    • ベストアンサー
    • XML
  • XMLデータを動的に使用する

    XML初心者です。 お恥ずかしながらかなり幼稚な質問かもしれませんが宜しくお願いします。 XMLファイルがひとつあります。 ----ファイルの中身---- <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="相対パス/fff.xsl"?> <rss version="2.0"> <channel> <item> <title>お中元の季節になりました。</title> <link>https://XXXX/XXXXX</link> <pubDate>2007/07/05</pubDate> <description>お中元の季節になりました。デパートが賑わいをみせています。</description> <category>浅目新聞</category> </item> <item> <title>今年は平年並みの暑さ</title> <link>https://XXXX/XXXXX</link> <pubDate>2007/07/05</pubDate> <description>気象庁が今年は平年並みの暑さになると発表しました。</description> <category>毎回新聞</category> </item> </channel> </rss> XSLファイルがあります。 ----ファイルの中身---- <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>新聞情報表示テスト</title> </head> <body> <p align="center">表示テスト</p> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="item"> <table border="0" width="500" align="center"> <xsl:if test="title='お中元の季節になりました。'"> <tr> <td colspan="2">URL: <xsl:value-of select="link" /></td> </tr> </xsl:if> </table> </xsl:template> </xsl:stylesheet> このXSLファイルについて、"お中元"の部分を動的に変えたいのですが、可能でしょうか? できればjavascriptは使いたくありません。(javascriptを無効にしているユーザーがいるため) インプットボックスが用意してあり、そこにユーザーが"今年は平年並みの暑さ"と入力すれば、そちらのlinkを引っ張ってきたいのです。 かなり抽象的な質問になってしまい、みなさんに意図を汲み取って頂かなければなりませんが、困っていますので宜しくお願いします。

    • ベストアンサー
    • XML