无法在 for-each-group 、 group-starts-with 和具有数字的元素名称中使用 xslt 动态获取元素值
Unable to get the element values dynamically using xslt inside for-each-group , group-starts-with and element name having numbers
无法获取在 xsl 中名称带有数字的元素的值
<UserDefinedFields>
<UserField1>yui</UserField1>
<UserField2>yui</UserField2>
<UserField3>yui</UserField3>
..
<UserField10>yui</UserField10>
</UserDefinedFields>
我试过的xslt是:
<xsl:for-each-group select="/UserDefinedFields/*" group-starts-with="UserField">
<xsl:variable name="ind" select="position()"/>
<xsl:element name="UDField$ind">
<xsl:value-of select="/UserDefinedFields/concat('UserField',$ind})"/>
</xsl:element>
</xsl:for-each-group>
需要以下结果:
<UserDefinedFields>
<UDField1>yui1</UDField1>
<UDField2>yuiyh</UDField2>
<UDField3>yuijk</UDField3>
..
<UDField10>yuirt</UDField10>
</UserDefinedFields>
为了将 $ind
数字的值应用到元素名称,您需要将其括在花括号中,并且 Attribute Value Template:
<xsl:element name="UDField{$ind}">
根据输入 XML 和提供的代码段,尚不清楚您需要 xsl:for-each-group
的原因。似乎 xsl:for-each
在 @select
到 select 上的谓词 UserDefinedFields
的那些名称以 UserField
开头的子元素应该足够了:
<xsl:for-each select="/UserDefinedFields/*[starts-with(local-name(), 'UserField')]">
<xsl:variable name="ind" select="position()"/>
<xsl:element name="UDField{$ind}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
无法获取在 xsl 中名称带有数字的元素的值
<UserDefinedFields>
<UserField1>yui</UserField1>
<UserField2>yui</UserField2>
<UserField3>yui</UserField3>
..
<UserField10>yui</UserField10>
</UserDefinedFields>
我试过的xslt是:
<xsl:for-each-group select="/UserDefinedFields/*" group-starts-with="UserField">
<xsl:variable name="ind" select="position()"/>
<xsl:element name="UDField$ind">
<xsl:value-of select="/UserDefinedFields/concat('UserField',$ind})"/>
</xsl:element>
</xsl:for-each-group>
需要以下结果:
<UserDefinedFields>
<UDField1>yui1</UDField1>
<UDField2>yuiyh</UDField2>
<UDField3>yuijk</UDField3>
..
<UDField10>yuirt</UDField10>
</UserDefinedFields>
为了将 $ind
数字的值应用到元素名称,您需要将其括在花括号中,并且 Attribute Value Template:
<xsl:element name="UDField{$ind}">
根据输入 XML 和提供的代码段,尚不清楚您需要 xsl:for-each-group
的原因。似乎 xsl:for-each
在 @select
到 select 上的谓词 UserDefinedFields
的那些名称以 UserField
开头的子元素应该足够了:
<xsl:for-each select="/UserDefinedFields/*[starts-with(local-name(), 'UserField')]">
<xsl:variable name="ind" select="position()"/>
<xsl:element name="UDField{$ind}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>