2013-03-07 2 views
0

XML:XSLT Param имени со значением узла

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

Мне нужно создать param для каждого узла паров в XML.

Так ожидаемый результат:

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

~ Edit:

Ошиблись, мне нужно фактический XSLT параметров, так что можно будет использовать позже в коде. зафиксировано выше.

~ Edit:

XSLT 1.0 требуется

~ Edit:

Основной проблемой является сделать имя XSL: из параметров от значения XML Как ниже недействителен:

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

Или переменная.

+0

Если вы внесете существенные обновления в свой вопрос, сообщите об этом любому, кто уже ответил - например, мне :) - комментируя их ответ, поэтому они знают, что нужно его обновить. – wst

ответ

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 =" {.} "' –

+0

@IanRoberts Да, это избыточно - просто использовать более подробный XPath, чтобы быть более ясным для OP. – wst

+0

Я не уверен './string()' is valid XPath - 'string' - это функция, а не проверка узла. –

0

Из ваших исправлений, похоже, вы ищете способ использовать один XSLT для создания другого. Для создания элементов в пространстве имен xsl: вам необходимо либо использовать <xsl:element> или использовать пространство имен Aliasing установки и

<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> 

элементы с префиксами xslo: в таблице стилей становится xsl: в выходном документе (который сам по себе является другой таблицей стилей).