• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:XSLTのtemplateタグで複数の名前空間を一括マッチさせたい)

XSLTのtemplateタグで複数の名前空間を一括マッチさせる方法は?

このQ&Aのポイント
  • XSLTのtemplateタグを使って複数の名前空間を一括マッチさせる方法について教えてください。
  • XMLスタイルシートのtemplateタグでは、myns接頭辞のタグのみ一括マッチする問題があります。どの接頭辞でもマッチさせる方法はありますか?
  • また、もし方法が存在しない場合は、その旨の意見もお願いします。

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

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

これでいいのかは自信がない ==============Q3477885-1.xml(適用するXML)====================== <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="Q3477885.xsl" type="text/xsl" ?> <foo> <bar xmlns="himajin100000">へんなやつ(終帝)</bar> <bar xmlns="himajin200000">キャット</bar> <bar xmlns="himajin300000">エンリケ</bar> <bar xmlns="himajin400000">マールバラ</bar> <baz xmlns="himajin500000">カプリコーン</baz> </foo> ==============Q3477885-1.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="xml" encoding="UTF-8" omit-xml-declaration="no" indent="yes" /> <xsl:template match="/"> <funya> <xsl:apply-templates /> </funya> </xsl:template> <xsl:template match="*[local-name() = 'baz']" /> <xsl:template match="*[local-name() = 'bar']"> <fuga><xsl:value-of select="./text()" /></fuga> </xsl:template> </xsl:stylesheet> =================Q3477885-2.xml(結果)================== <?xml version="1.0" encoding="UTF-8"?> <funya> <fuga>へんなやつ(終帝)</fuga> <fuga>キャット</fuga> <fuga>エンリケ</fuga> <fuga>マールバラ</fuga> </funya>

ggaogg
質問者

お礼

わざわざご丁寧にXML、XSLT、そして結果まで載せて頂いちゃって。。 一応すべてのの名前空間のタグに対して操作することは可能なようですね。 ただし、templateタグの中でfor-eachするときにも、select="*[local-name()=element]'"といった感じで記述しないとマッチしてくれないみたいですね・・。 しかし答えとしては、「無理」というのを期待していて、無理ならしょうがないかーあきらめようと思っていたので、うれしい結果に終わってよかったと思っています。 himajin1000000さん、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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
  • 何故か子の要素に xmlns=

    ある「AABBCC」のタグが記述されているXML文書が有ります。 その文書に対し下記の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="xml" version="1.0" encoding="UTF-16" indent="yes" /> <xsl:template match="/"> <ABC xmlns="http://www.abcd.co.jp/Schema_1_1"> <xsl:apply-templates select="AABBCC" /> </ABC> </xsl:template> <xsl:template match="AABBCC"> <DEF> <xsl:attribute name="ID">1</xsl:attribute> </DEF> </xsl:template> </xsl:stylesheet> 下記のような出力を期待しているのですが、 <?xml version="1.0" ?> <ABC xmlns="http://www.abcd.co.jp/Schema_1_1"> <DEF ID="1" /> </ABC> 何故か以下のようにDEFの属性に「xmlns=""」が追加されてしまいます。 <?xml version="1.0" ?> <ABC xmlns="http://www.abcd.co.jp/Schema_1_1"> <DEF ID="1" xmlns="" /> </ABC> まだ、XML,XSL共に勉強を始めたばかりでよく分かってないのでどうしてこのようなことが起こるのか、また対処法を教えてください。 アホな質問かもしれませんが、よろしくお願いします。

    • 締切済み
    • XML
  • XSLTによるノードの抽出の際に親のnamespaceで子ノードのnamespaceが上書きされないようにするには?

    下記のようなXMLに <?xml version="1.0" encoding="EUC-JP"?> <parent xmlns:xhtml="http://parent"> <child id="A1"> <taroh xmlns="http://child"> <age>10</age> </taroh> </child> </parant> 下記のようなXSLTを適用した場合、 <?xml version="1.0" encoding="EUC-JP"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" > <xsl:output method="xml"/> <xsl:template match="text()|@*"> </xsl:template> <xsl:template match="node()[@id='A1']"> <xsl:copy-of select="./node()"/> </xsl:template> </xsl:stylesheet> 通常下記のような結果となりますが、 <?xml version="1.0" encoding="EUC-JP"?> <taroh xmlns="http://parent"> <age>10</age> </taroh> namespaceを変更させずに、下記のような結果を 得るためにはどのようにすればよいでしょうか? <?xml version="1.0" encoding="EUC-JP"?> <taroh xmlns="http://child"> <age>10</age> </taroh> 抽出には javax.xml.transform.Transformerを用いています。 どうか、よろしくお願いします。

    • 締切済み
    • XML
  • XSLTでの複数のXML検索結果を統合するには?

    初歩的な質問でごめんなさい。 XSLTを使って複数のXMLを検索した結果を、表示したいのですが、結果を1つのテーブルに統合するにはどうすればいいのでしょう。 次のスクリプトを基に作りたいのですが。 function search (keyword) { node = thexsl.XMLDocument.selectSingleNode("//xsl:for-each"); if(keyword) node.setAttribute("select", "//data[contains(word, '" + keyword + "')]"); else node.setAttribute("select", "//data"); str = thexml.XMLDocument.transformNode(thexsl.XMLDocument); view1.innerHTML = str; } 次のファイルを利用して検索したいです、 <xml id="thexml1" src="db1.xml"></xml> <xml id="thexml2" src="db2.xml"></xml> <xml id="thexml3" src="db3.xml"></xml> <xml id="thexsl" src="db.xsl"></xml> xmlファイルの内容 <?xml version="1.0" encoding="utf-8" ?> <dataroot xml:lang="ja"> <data>・・・</data>  ・・・ </dataroot> xslファイルの内容 <?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <table> <tr>・・・</tr> <xsl:for-each select="//data"> <tr>・・・</tr> </xsl:for-each> </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
  • 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
  • スタイルシートを使って、要素タグがついたまま文を取り出したい

    お世話になります。 下記出力.xmlの内容で 「出力.xml <文> I <u>have <空欄>a</空欄> pen</u> <文>」 という内容があります。 そこで、スタイルシートの処理を通して、 「I <u>have <空欄>a</空欄> pen</u>」とタグが付いたまま取り出したいのですが、 下記のようなスタイルシートにすると 「I <u>have a pen </u>」 と外の<u>のタグしか表示されません。 「変換.xsl <xsl:apply-templates select="文"> <xsl:template match="u"> <xsl:element name="u"> <xsl:value-of select="." /> </xsl:element> <xsl;template> <xsl:template match="空欄"> <xsl:element name="空欄"> <xsl:value-of select="." /> </xsl:element> <xsl;template>                  」 どのようにすれば 「I <u>have <空欄>a</空欄> pen</u>」とタグがついたままで 取り出せるのでしょうか? 大変お手数ですが、何卒よろしくお願いします。

    • ベストアンサー
    • XML
  • VBAからxml・スタイルシートを作成すると、一度保存しないと正常に動作しない

    お世話になります。 現在エクセルのVBAで(1)のようなソースで(2)を書き出しています。 (2)の「<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 」もVBAで「indate=<?xml version="1.0" encoding="UTF-8"?xsl:stylesheet version="1.0" lns:xsl="http://www.w3.org/1999/XSL/Transform">」とそのまま打ち込んでいます。 スタイルシートを使用して返還しようとすると、「パラメータが違う」旨メッセージがでてきて、(2)を一度開き、何も変更しないで保存すると正常にスタイルシートの変換処理が行われます。 (2)のVBAで書き出したxmlがUTF-8で保存されていないように感じるのですが、どのように変更すればUTF-8で書き出せるのでしょうか? 以上お手数ですが、よろしくお願いします。 (1) Const ForReading = 1, ForWriting = 2, ForAppending = 3 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Dim fs, f, ts Set fs = CreateObject("Scripting.FileSystemObject") fs.CreateTextFile "F:\EXCEL→XML\問題形式" & Worksheets("設問形式設定シート").Range(設問形式設定シート大問列 & 設問形式設定シート行).Value & ".xsl" 'ファイルの作成 Set f = fs.GetFile("F:\EXCEL→XML\問題形式" & Worksheets("設問形式設定シート").Range(設問形式設定シート大問列 & 設問形式設定シート行).Value & ".xsl") Set ts = f.OpenAsTextStream(ForWriting, TristateTrue) ts.Write indate ts.Close (2) <?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="設定.xsl" /> <xsl:output method="xml" encoding="UTF-8" indent="yes" /> <xsl:param name="形式番号" >10001</xsl:param> <xsl:template match="/"> <xsl:call-template name="問題形式" /> </xsl:template> xsl:stylesheet>

  • 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の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