2012-05-29 63 views
0

所以我一直在研究一些XSLT來修改YouTube的RSS XML,當然,只要我得到它的工作,他們已經改變了他們的格式。之前,每個視頻的唯一ID都存儲在<videoid>標籤之間,然後您可以使用它創建網址。但是現在唯一的方式得到一個視頻的URL是從被包含在<media:group>標籤這樣從XSLT中的轉義XML標籤中提取屬性?

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

的標籤。

我一直在試圖得到它是

<xsl:value-of select="media:group/media:[email protected]" /> 

,但這樣做的方式給我,說

xsl:value-of : could not compile select expression 'media:group/media:[email protected]' 

有誰看到什麼不對的編譯錯誤?

此外,作爲一個側面說明,我希望做同樣的事情與

<xsl:value-of select="media:group/media:[email protected]" /> 

但也有每個條目數<media:thumbnail>標籤;這隻會抓住第一個,或者這可能會導致錯誤?

回答

2

您在XPath中缺少/。嘗試:

​​

至於DOM API而言,屬性屬於一個元素。 XPath以一種稍微不同的方式進行討論。子節點位於child::軸上(這是默認設置,因此很少看到它明確使用),屬性位於atribute::軸上(可以使用縮寫@)。在構建XPath表達式時,您基本上會構建一個由/分隔的location steps序列。屬性是遠離擁有它的元素的「一個位置步驟」。

您的問題的第二部分。選擇器將創建與該表達式匹配的所有節點的序列(思考節點列表),並執行xsl:指令在該序列上所做的規定。你的情況(xsl:value-of),所有匹配media:thumbnail的所有@url將在節點集,這將是進一步放在一起converted to a string

節點集通過返回的字串值轉換爲字符串首先按照文檔順序的節點集中的節點

因此,您將獲得「第一個」的值。也就是說,我會爭辯說,在多個節點序列上運行xsl:value-of並不是很直觀(即使規範清楚地說明了它會做什麼),所以如果你更喜歡讀取代碼的人,具體與您的選擇器。例如:media:group/media:thumbnail[1]/@url

+0

老兄,我幾乎在這裏撕裂;你是一個拯救生命的人。一旦我得到屬性的東西工作,我決定回到舊的方法,只是附加視頻ID,我使用substring-before和substring-after提取。非常感謝你,我正在瘋狂地嘗試修復它。 – Adam