2013-03-07 71 views
0

XML的值:XSLT帕拉姆名稱與節點

<root> 
<param name="a">valueOfA</param> 
<param name="b">valueOfB</param> 
<param name="c">valueOfC</param>  
</root> 

我需要爲每個XML節點PARAM創建param

所以預期的結果:

<xsl:param name="a" select="valueOfA" /> 
<xsl:param name="b" select="valueOfB" /> 
<xsl:param name="c" select="valueOfC" /> 

編輯:

弄錯了,我需要一個實際的XSLT PARAM,所以這將是可用在後面的代碼。固定在上面。

編輯:

XSLT 1.0需要

編輯:

主要問題是使XSL的名字:從XML值PARAM如下 無效:

<xsl:param name="{@name}" /> 

或可變。

+0

如果您正在對您的問題進行實質性更新,請通過評論他們的答案,告知任何已經回答的人 - 像我一樣:),以便他們知道要更新它。 – wst 2013-03-08 17:14:39

回答

0
<xsl:template match="root"> 
    <xsl:copy> 
    <xsl:apply-templates select="param"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="param"> 
    <param name="{ ./@name }" select="{ string(.) }"></param> 
</xsl:template> 
+1

這應該可能只是'select =「{。}」' – 2013-03-07 18:10:18

+0

@IanRoberts是的,它是多餘的 - 只需要使用更詳細的XPath就可以對OP更清晰。 – wst 2013-03-07 19:00:30

+0

我不確定'./string()'是否有效XPath - 'string'是一個函數,不是節點測試。 – 2013-03-07 19:13:08

0

從您的編輯看來,您正在尋找使用一個XSLT創建另一個XSLT的方法。爲了在xsl:命名空間中創建元素,你需要或者使用<xsl:element>或者使用命名空間別名設施在樣式表在輸出文檔中成爲xsl:(這本身就是另一種樣式表)前綴xslo:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
    xmlns:xslo="urn:xsl-output" exclude-result-prefixes="xslo"> 
    <xsl:namespace-alias stylesheet-prefix="xslo" result-prefix="xsl" /> 

    <xsl:template match="root"> 
    <xslo:stylesheet version="1.0"> 
     <xsl:apply-templates select="param" /> 
    </xslo:stylesheet> 
    </xsl:template> 

    <xsl:template match="param"> 
    <xslo:param name="{@name}" select="{.}" /> 
    </xsl:template> 
</xsl:stylesheet> 

元素。