2012-07-10 76 views
-1

我有XML,看起来像这样:XSL串连属性为每个

<field index="1" name="my_field_1" type="String"> 
<value>Value of Field 1</value> 
</field> 

<field index="2" name="my_field_2" type="String"> 
<value>Value of Field 2</value> 
</field> 

<field index="3" name="my_field_3" type="String"> 
<value>Value of Field 3</value> 
</field> 

在后来的每个I遍历这些领域,我要尽量采取现场(这是相同的)的名称,并拼接它索引属性(取决于可能变化的元素数量)。

我试过这个(我把撇号放在变量中,因为我不确定如何逃脱它)。

<xsl:variable name="currentIndex" select="@index"></xsl:variable> 
      <xsl:variable name="apostrof">'</xsl:variable> 

<xsl:value-of select="concat(
'//field[@name=', 
$apostrof, 
'sar_account_entrepreneur_name_', 
@index, 
$apostrof, 
']/value')"/> 

问题在于,这不是选择值,它只是输出字符串my_field_1。 输出应该是字段1的值,字段2的值等。我需要的是动态地将名称属性与索引属性相连接。

+2

我认为这有助于您举例说明您希望输出看起来像什么。 – hielsnoppe 2012-07-10 07:57:26

+0

我更新的XML这样: <字段索引= “1” 名称= “my_field_1” 类型= “字符串”> 值字段的1 <字段索引= “2” 名称= “my_field_2” 型=“字符串”> 值字段2的 所以输出将是 值字段1,字段2等 – Peter 2012-07-10 08:13:30

+1

好的价值,我想我明白了。 :-) – hielsnoppe 2012-07-10 08:18:53

回答

0

的回答很简单:

这段代码使用指数ATTR并concated来命名。

0

以下变换应用到该输入

<?xml version="1.0" ?> 
<root> 
<field index="1" name="my_field_1" type="String"> 
    <value>Value of Field 1</value> 
</field> 

<field index="2" name="my_field_2" type="String"> 
    <value>Value of Field 2</value> 
</field> 

<field index="3" name="my_field_3" type="String"> 
    <value>Value of Field 3</value> 
</field> 
</root> 

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:for-each select="field"> 
      <xsl:value-of select="value" /> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:transform> 

产生的

<?xml version="1.0"?> 
Value of Field 1Value of Field 2Value of Field 3 

期望的输出我希望这有助于。否则给我一个评论中的提示。

+0

HI @heilsnoppe我需要更清晰我需要使用索引并将其与字段名称结合使用。因为有更多的领域,我只对其中很少的领域感兴趣。在xsl中,我希望使用所有字段的写入名称并向它们添加索引。 使用索引是因为xml是自动生成的,索引可以具有从0到n的值。如果这是有道理的。 – Peter 2012-07-10 09:08:15

+1

也许你可以更新你的例子,以便它精确地反映你的输入和你想要的输出? – hielsnoppe 2012-07-10 09:11:42

+0

对不起,我没有找到答案我会更新问题,我会添加答案。 – Peter 2012-07-10 13:20:31