
XML勉強中です。実は、XML文書に決められたタグがあって、その中身を探してXSL変換、というのは覚えたのですが、ふと迷ってしまいました。
たとえば、トップレベルにあるタグの名前が不明な場合、エレメントの一覧を取得するにはどうしたら良いのでしょうか?
自分でXMLを記述しておいてそれはないだろと言われそうなのですが、HTMLのための資源としてではなく、データとしての利用を考えたときにふと悩んでしまいました。
<person>
<name> <ID> etc...
</person>
<company>
<name> <adress> <tel>etc...
</company>
このとき、personとcompanyを取得したいのですが・・・。
template match="/" にて value-of select="name(.)" とか一通り試したのですが、出てくれませんでした。
まだはっきりとXSLTの書き方を習得していないので、とてつもなくアホな質問かもしれませんが、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
正しいやり方かどうかわかりませんが、参考まで...
<xsl:template match="/">
<!-- root -->
<xsl:for-each select="./*">
<xsl:value-of select="name()"/><br/>
</xsl:for-each>
<!-- top -->
<xsl:for-each select="./*/*">
<xsl:text> </xsl:text><xsl:value-of select="name()"/><br/>
</xsl:for-each>
<!-- second -->
<xsl:for-each select="./*/*/*">
<xsl:text> </xsl:text><xsl:value-of select="name()"/><br/>
</xsl:for-each>
</xsl:template>
No.2
- 回答日時:
おそらく理由もちゃんと知った方が良いと思うので、他の方の回答の補足のような形になってしまいますが。
/は、あなたが言う所の「トップレベルのエレメント」にではなく、その上に仮想的に存在する「ルートノード」にマッチします。
したがって、取得したい要素は、このルートノードの子ノードということになります。
この理屈を理解いただければ、FlossenEngelさんの回答にあるように一度ルートノードにマッチしたxsl:templateの中でその子ノードを取得しても良いですし、以下のようにxsl:templateのmatchを変更してもOKです。
<xsl:template match="/*">
<xsl:value-of select="name()"/>
</xsl:template>
ちなみに、XSLTでぶつかる問題はXPathを理解しておけば解決することが多いと思いますので、今後ぶつかる問題に対処できるように、XPathについて勉強しておくことをお奨めします。
参考URL:http://www.w3.org/TR/1999/REC-xpath-19991116
あっ、なるほど!一番上にあるもの、ではなくてこれ自体が子ノードなのですね。
どうもノードの指定の方法でつまづいてしまったので、XPathの記法から勉強してみたいと思います。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- 営業・販売・サービス 仕入れの方法 1 2023/05/21 18:55
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
空かスペースを認識させること...
-
タグの有無の判定
-
CPUの考え方を教えてください ...
-
東芝のDynabookなのですがアン...
-
ルート要素ノードが2個ある場合?
-
XMLデータを整形して、ブラウザ...
-
C言語:文字列の並び替え
-
Excel-VBAでXMLの複数ノードの...
-
concat関数内でのシングルクォ...
-
XML、XSLTの適応エラー(IEから...
-
バッチファイルでテキストファ...
-
XMLファイル内のデータ(値)を変...
-
XML同じ名前の要素を自動で集約...
-
TreeViewの再表示のちらつきを...
-
双方向リストの関数
-
C#でTreeViewのCheckBoxのサイ...
-
C#で使用中のファイルに別のフ...
-
昔Winnyってありましたけど、あ...
-
あせんうぶり言語
-
XMLとRDFの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タグの有無の判定
-
XSLで、XMLの空タグを制御したい。
-
XMLをXSLを使いHTMLに変換した...
-
XMLとXSLTでリンクを張る方法
-
XSL中の改行、タブを無効にした...
-
ノードの並び替え
-
xmlのテキストにリンクを張りた...
-
XSLTのtemplateタグで複数の名...
-
XSLでノードの順番取得
-
xslでの最小値、最大値の取得
-
XSLTにてタグ名を取得する方法
-
重複するものを消したい
-
xmlから吐き出したhtmlデータの...
-
XSLTで固定長データファイルを...
-
<xsl:apply-templates />単独
-
簡単なことだと思うんですが・・・
-
XSLTがブラウザで表示されません。
-
スタイルシートを使用したXM...
-
XSL内でJavaScriptを記述し、Ja...
-
XML,XSL,JavaScriptの連携
おすすめ情報