2012-02-17 148 views
1

我有一個這樣的XML,我想要使用XSL文件在「標題」中定義的屬性。獲取XML元素的動態路徑

我想,即使我更改的元素

  • 目錄書籍
  • 光盤與書籍

XML檢索值:

<catalog> 
    <cd> 
     <title att="abce" att2="false">Empire Burlesque</title> 
     <artist>Bob Dylan</artist> 
     <country>USA</country> 
     <company>Columbia</company> 
     <price>10.90</price> 
     <year>1985</year> 
    </cd> 
</catalog> 

這個方法我試過以獲得價值

<xsl:variable name="outermostElementName" select="catalog/cd/title/attribute::att"/> 

,但這是特定於僅此XML我想這是genric

有什麼辦法?

+0

Librak:你可能有興趣看到比目前公認的答案更通用的,真正的XSLT解決方案。 – 2012-02-17 16:14:40

回答

1

鑑於當前的的xsl:變量,我想你可以使用下面的方法更通用

<xsl:variable name="outermostElementName" select="catalog/*/title/@att" /> 

<xsl:variable name="outermostElementName" select="//title/@att" /> 

第一個的一個假定的根元素總是叫目錄。第二個不依賴於祖先節點,但會在XML中的任何級別拾取標題元素。

+0

是的,它是有幫助的,但如果什麼也沒有目錄,CD和標題 我meanit是書籍,書籍和標題...? 有沒有什麼方法可以檢測到這個... – Librak 2012-02-17 11:37:04

0

要實現由XSLT模板匹配模式提供的通用性。

可以簡單地具有:

<xsl:template match="title/@att"> 
    <!-- Your processing here --> 
</xsl:template> 

,每當有一個<xsl:apply-templates select="expression"/>指令使得expression選擇title/@att屬性,上述模板將被選擇用於該屬性節點的ptocessing。

這不依賴於任何其他外部環境。