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ランキング
-
XSLで、XMLの空タグを制御したい。
-
タグの有無の判定
-
VBAでXMLを出力するプログラム...
-
CPUの考え方を教えてください ...
-
バッチファイルでテキストファ...
-
TreeViewで複数ノードの選択は...
-
UTF-8でエンコーディングとはど...
-
C# TreeView 効率良いノード追...
-
ノードとは
-
あるノードリストに、特定の名...
-
XMLデータを整形して、ブラウザ...
-
東芝のDynabookなのですがアン...
-
SNMP リンクダウンとノードダ...
-
XMLでホームページ
-
C++における並列処理に関する質...
-
VBでXMLファイルを作ると xmlns...
-
C#で使用中のファイルに別のフ...
-
同じタグ名の項目取得
-
ツリービューの使い方が・・・
-
HTTPステータス 404 - There is...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タグの有無の判定
-
XSLで、XMLの空タグを制御したい。
-
スタイルシートを使用したXM...
-
XMLのHTMLへの変換 (初心者)
-
ノードの並び替え
-
XSL内でJavaScriptを記述し、Ja...
-
xmlのテキストにリンクを張りた...
-
xml→htmlへの変換&ページ分割...
-
空かスペースを認識させること...
-
XSLTにてタグ名を取得する方法
-
XMLとXSLTでリンクを張る方法
-
XSL中の改行、タブを無効にした...
-
重複するものを消したい
-
xslでの最小値、最大値の取得
-
スタイルシートについて
-
■XSLT■固定文字を使ったループ...
-
javaのTransformerでエラー
-
for-eachが上手くいきません
-
XMLデータを動的に使用する
-
XSLTで固定長データファイルを...
おすすめ情報