2012-02-17 102 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。

这不依赖于任何其他外部环境。