0

そこで私は、YouTube の RSS XML を変更する XSLT に取り組んできました。もちろん、それが機能するようになるとすぐに、フォーマットが変更されました。以前は、各動画の一意の ID が<videoid>タグ間に格納されていたため、それを使用して URL を作成できました。しかし、現在、動画の URL を取得する唯一の方法は、このようなタグからです。

<media:player url='https://www.youtube.com/watch?v=XXXXXXXXXXX&amp;feature=youtube_gdata_player'/>`

<media:group>タグ内に含まれています。

私がそれを手に入れようとしてきた方法は

<xsl:value-of select="media:group/media:player@url" />

しかし、それを行うと、次のようなコンパイルエラーが発生します

xsl:value-of : could not compile select expression 'media:group/media:player@url'

誰かがそれで何か問題があると思いますか?

また、補足として、私は

<xsl:value-of select="media:group/media:thumbnail@url" />

ただし<media:thumbnail>、各エントリにはいくつかのタグがあります。これは最初のものを取得するだけですか、それともエラーを引き起こす可能性がありますか?

4

1 に答える 1

2

/XPath にa がありません。試す:

<xsl:value-of select="media:group/media:player/@url" />

DOM API に関する限り、属性は要素に属します。XPath では、少し異なる方法で処理されます。子ノードはchild::軸上に存在し (これはデフォルトであるため、明示的に使用されることはめったにありません)、属性はatribute::軸上に存在します (省略された でそこに到達できます@)。XPath 式を構築する場合、基本的に/. 属性は、それを所有する要素から「1 ステップ」離れています。

あなたの質問の2番目の部分に。セレクターは、式に一致するすべてのノードのシーケンス (ノード リストと考えてください) を作成し、xsl:そのシーケンスに対して命令が指示することを実行します。あなたの場合(xsl:value-of)、すべて@urlの一致media:thumbnailがノードセットにまとめられ、さらに文字列に変換されます

ノード セットは、ノード セット内のドキュメント順で最初のノードの文字列値を返すことにより、文字列に変換されます。

したがって、「最初の」値を取得します。そうは言ってxsl:value-ofも、複数のノードのシーケンスで実行することは実際には直感的ではないと主張します (仕様にはそれが何をするかが明確に示されていますが)。あなたのセレクターで。何かのようなもの:media:group/media:thumbnail[1]/@url

于 2012-05-29T20:50:35.743 に答える