XMLの名前空間をXSLから指定する方法

このQ&Aのポイント
  • XMLの名前空間をXSLスタイルシートファイルで識別する方法について教えてください。
  • XMLの名前空間をXSLで使用する際の指定方法について詳しく教えてください。
  • XMLの名前空間とXSLスタイルシートの関連性について教えてください。
回答を見る
  • ベストアンサー

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にはマッチしませんよね。 それをマッチさせる方法を教えてください。

  • ggaogg
  • お礼率86% (209/243)
  • XML
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
回答No.1

確認: 【入力】 <?xml version="1.0" encoding="Shift_JIS" ?> <?xml-stylesheet type="text/xsl" href="fuga.xsl"?> <oyaji:samp xmlns:oyaji="http://sampsampsamp.co.jp/">abcあいう</oyaji:samp> 【変換】 <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" > <xsl:template match="/"> <hoge> <xsl:apply-templates /> </hoge> </xsl:template> <xsl:template match="samp">かきく<xsl:value-of select="/" /></xsl:template> </xsl:stylesheet> 【結果】 <?xml version="1.0" encoding="UTF-16"?><hoge>abcあいう</hoge> 【変換改】 <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:himajin="http://sampsampsamp.co.jp/"> <xsl:template match="/"> <hoge> <xsl:apply-templates /> </hoge> </xsl:template> <xsl:template match="himajin:samp">かきく<xsl:value-of select="/" /></xsl:template> </xsl:stylesheet> 【変換結果】 <?xml version="1.0" encoding="UTF-16"?><hoge xmlns:himajin="http://sampsampsamp.co.jp/">かきくabcあいう</hoge> EXTYLEにて実験。

ggaogg
質問者

お礼

EXTYLEではなくIEなどのブラウザで表示結果を見た限り、お答えのようになりました。 質問したことについて、まとめるならば、ソース元XML文章の名前空間と、スタイルシートXSLの名前空間とで、同じものを使用すれば、結果的にそれをXPathで参照できるということでしょうか。 そのこと意外にも、XPathのルート参照の意味("/")についても、理解させてもらえる内容で、ためになりました。ありがとうございました。 あと、なんか修正されたみたいでしたが、どこが異なるのかわかりませんでした。私の知識の範外の事なのかもしれませんが・・。 教gooでは〆てから返信するようにとなっていますが、私の理解が間違っていたり、あとレス2の内容についてもできればお聞きしたいので、一応、〆るのは今から12時間以上経ってからにしようと思います。

その他の回答 (2)

回答No.3

>どこが異なるのかわかりませんでした。私の知識の範外の事なのかもしれません 結論から言えば俺の勘違いでした。全く違いはありませんorz No.1の原稿作ってから、変換実行して、変換後のXMLの改行が見づらいことに気づき・・【原稿側だけ】XML,XSLT,結果全てを弄ったんですね。 原稿を弄った後に、変換かまして確認することなくNo.1に投稿してしまったんですよ ところで ここの回答システムって、URLが半角までってなっているようで、名前空間とか <hoge xmlns="http://www.example.com/">abcあいう</hoge> って書くと、見ての通り、">abcまでがURLだと思われてしまい、 ブラウザで見るとそこまでがリンクになってしまうんですね。 だから投稿した後、弄りミスったかな、と勘違いしたの。 (確認画面があるにも関わらず、確認せずに惰性でクリックするようになっているんで(^^;;;) だから、きちんと変換ができるものを確認してから投稿しなおしてみたのがNo.2なのねorz ところが、よく見たらNo.1と何も変わらないことに気づいちゃったのorz

ggaogg
質問者

お礼

そこまで気を使っていただいていたとは・・ それを考えると、質問内容の説明で手を抜いていたような気がしてきます。。 <hoge xmlns="​http://www.example.com/">abc​あいう</hoge> については、こちらも初めて知りました。 よい例を見せてもらえたと思っています。 知りたいことも知ることができて、加えて楽しかったです。 ありがとうございました。

回答No.2

ごめんなさい。おもいっきり捏造になってましたorz 【入力】 <?xml version="1.0" encoding="Shift_JIS" ?> <?xml-stylesheet type="text/xsl" href="fuga.xsl"?> <oyaji:samp xmlns:oyaji="http://sampsampsamp.co.jp/">abcあいう</oyaji:samp> です

関連するQ&A

  • XSL内でJavaScriptを記述し、JavaScript内でXMLデータを取得するには・・・

    大変困っていますのでよろしくお願いします。 XSLのファイル内でJavaScriptを記述し、JavaScriptでxmlの要素を取得操作したいのですが、とり方がわかりません。 ご教授のほどをよろしくお願いします。 ================================================================== sample.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>XML: 基本サンプル</title> </head> <body> <p align="center">サンプル</p> <xsl:apply-templates select="information/value/applicationinfo" /> </body> </html> </xsl:template> <xsl:template match="value/applicationinfo"> <Script Language = "JavaScript"> <xsl:comment> <![CDATA[ document.write("<xsl:value-of select=\"componentname\" />"); ]]> </xsl:comment> </Script> <table border="1"> <tr> <td><xsl:value-of select="componentname" /></td> </tr> </table> </xsl:template> </xsl:stylesheet> ================================================================== 下のテーブルでは要素を表示することはできます。 このやり方では駄目なのでしょうか?

    • ベストアンサー
    • XML
  • xsl 内の実体参照を宣言する方法??

    xsl 内で xhtml を使用する際に、&nbsp; などの実体参照のエンティティ宣言をしたいのですが、方法がわかりません。パーサは libxslt(AxKit) です。 例えばこんな感じかな、と思うのですが・・。 <?xml version="1.0" encoding="EUC-JP" ?> <!DOCTYPE html [ <!ENTITY nbsp " "> ]> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="EUC-JP"/> <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match="root"> <html> <head> ......

    • ベストアンサー
    • XML
  • XSLTのtemplateタグで複数の名前空間を一括マッチさせたい

    XMLスタイルシートのtemplateタグは、以下のように書きますよね。 (xmlns:xsl="http://www.w3.org/1999/XSL/Transform"が宣言されているとする) <xsl:template match="myns:example"> </xsl> しかしこうすると、myns接頭辞のタグのみしかマッチしません。 どんな接頭辞でもマッチするようにしたかったので、 <xsl:template match="*:example"> </xsl> としてみましたが、スタイルシートがコンパイルできないと言われてしまいます。 何か方法ないでしょうか。 あるいは何も方法がないのであれば、そのような意見もお願いします。

    • ベストアンサー
    • 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
  • <xsl:apply-templates />単独

    お世話になります。 現在、サンプルのXSLTスタイルシート内を解析中なのですが、 各テンプレート内に、 <xsl:apply-templates />という単独での要素が、 いくつも出てきます。 ネット上で調べてみたところ、 「ほかのテンプレートの処理に移ることが出来る」 ということのようですが、 いまいち、この単独での要素を、 記述する意味が、よくわかりません。 (最近、XSLTを本で勉強しはじめたばかりなのですが、   その本には、”<xsl:apply-templates select="mains">”みたいな例しか掲載されておらず、   <xsl:apply-templates />という単独での説明が、残念ながら存在しておりませんでした・・・) そこでご質問内容ですが、 XSLTスタイルシート内のテンプレート内に、 <xsl:apply-templates />という単独で、 で記述するのは、 どのようなことを実現させたいときに、 記述しているのでしょうか? 以上になります。 出来ましたら、例などを出していただきまして、 具体的に理解しやすく教えていただけますと 助かります。 どうぞよろしくお願いします。

    • ベストアンサー
    • XML
  • 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>

  • xslのdocument関数で読込んだ2つのxmlをxsl:sortしたい

    次のXSLで動作させています。 <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xml:space="default" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> <xsl:output method="text" /> <xsl:template match="/"> <xsl:for-each select="document('取り込むXMLファイル')//z:row"> <xsl:value-of select="@取り出したい属性の名前" /> </xsl:for-each> <xsl:for-each select="//z:row"> <xsl:value-of select="@取り出したい属性の名前" /> </xsl:for-each> </xsl:template> </xsl:stylesheet> ここまでは出来たのですが、xsl:sortでまとめてsortするにはどうすればいいのでしょうか?

    • ベストアンサー
    • XML
  • XSLのifがいまいち理解ができなく。

    if文をどうやればいいのかで悩んでしまいに詰まっている状態です。 URLがない場合は何も表示しないにしたいのですが、参考ページを見ても全くわからない状態。 test.xsl <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet> <xsl:template match="/"> <xsl:apply-templates select="page/message"/> </xsl:template> <xsl:template match="page/message"> <table> <tr> <td>名前</td> <td><xsl:value-of select="name"/></td> </tr> <tr> <td>URL</td> <td><a><xsl:attribute name="href"><xsl:value-of select="@url" /></xsl:attribute><xsl:attribute name="target">_blank</xsl:attribute><xsl:value-of select="@url" /></a></td> </tr> </table> </xsl:template> </xsl:stylesheet> xml <?xml version="1.0" encoding="utf-8"?> <page> <message url="http://yahoo.co.jp"><name>山田太郎</name></message> <message url=""><name>山田花子</name></message> </page>

    • ベストアンサー
    • XML
  • xsl、xpath式の書き方について

    xslで質問させてください。 以下のようなxmlとxslを作っているのですが、xslの最後のほうで、 sample.xmlの/empList/emp/type/@idの値に応じて、typeList.xmlの/typeList/type/titleの値を取得したくて、 xsl:value-of select="document('typeList.xml')/typeList/type[@id = type/@id]/title/text()" /> と書いていますが、うまくいきません。どうすればいいでしょうか? -----[sample.xml] <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="a.xsl" type="text/xsl"?> <empList> <emp> <type id="1" /> <name>鈴木</name> <desc>あああ</desc> </emp> <emp> <type id="2" /> <name>田中</name> <desc>いいい</desc> </emp> </empList> -----[typeList.xml] <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="a.xsl" type="text/xsl"?> <typeList> <type id="1"> <title>タイプ1</title> </type> <type id="2"> <title>タイプ2</title> </type> </typeList> -----[a.xsl] <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="UTF-8" omit-xml-declaration="yes" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" media-type="text/html" /> <xsl:template match="/"> <html> <head><title>サンプル</title></head> <body> <xsl:apply-templates select="empList/emp" /> </body> </html> </xsl:template> <xsl:template match="emp"> <h2><xsl:value-of select="name/text()" /></h2> <p>タイプ:<xsl:value-of select="document('typeList.xml')/typeList/type[@id = type/@id]/title/text()" /></p> <p>メモ:<xsl:value-of select="desc/text()" /></p> </xsl:template> </xsl:stylesheet>

    • ベストアンサー
    • XML

専門家に質問してみよう