无法在 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>