Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在XSLT1.0中将属性转换为具有匹配名称的元素_Xslt_Xpath - Fatal编程技术网

在XSLT1.0中将属性转换为具有匹配名称的元素

在XSLT1.0中将属性转换为具有匹配名称的元素,xslt,xpath,Xslt,Xpath,我需要创建一个XSLT,将源xml中的一个属性转换为目标xml中的一个新元素,并将元素名分配给源xml中属性的“name”值 例如: 资料来源: <ProductType>Fridge</ProductType> <Features> <Feature Name="ValveID">somename</Feature> <Feature Name="KeyIdentifier">someID&

我需要创建一个XSLT,将源xml中的一个属性转换为目标xml中的一个新元素,并将元素名分配给源xml中属性的“name”值

例如:

资料来源:

<ProductType>Fridge</ProductType>
    <Features>
      <Feature Name="ValveID">somename</Feature>
      <Feature Name="KeyIdentifier">someID</Feature>
冰箱
名字
某物
结果:

<Fridge>
    <Feature>somename</Feature>
    <Feature>someID</Feature>

名字
某物
预期结果:

  <Fridge>
        <ValueID>somename</ValueID>
        <KeyIdentifier>someID</KeyIdentifier>

名字
某物
我的XSLT目前看起来像这样:

1 <Fridge>
2       <xsl:for-each select="$var6_ProductData/Features/Feature">
3            <xsl:variable name="var8_Feature" select="."/>
4            <xsl:element name="{name()}">
5                 <xsl:value-of select="string($var8_Feature)"/>
6            </xsl:element>
7       </xsl:for-each>
8 </Fridge>
1
2.
3.
4.
5.
6.
7.
8.
我需要更改第4行,但不确定如何更改。有什么想法吗


我会试试看

<xsl:element name="{@Name}">

由于
name()
为您提供了XML元素“Feature”(由
xsl:for each
选择)的名称,而不是当前节点的
name=
属性的内容。

找到了它:

1 <Fridge>
2       <xsl:for-each select="$var6_ProductData/Features/Feature">
3            <xsl:variable name="var8_Feature" select="."/>
3            <xsl:variable name="var9_Feature" select="@Name"/>
4            <xsl:element name="{$var9_Feature}">
5                 <xsl:value-of select="string($var8_Feature)"/>
6            </xsl:element>
7       </xsl:for-each>
8 </Fridge>
1
2.
3.
3.
4.
5.
6.
7.
8.
通用解决方案(也更惯用):



元素被转换成具有动态名称的新元素,
元素也是如此。

Dipesh,我将使用Tomalak的实现,因为它是通用的,并且为增强提供了更大的灵活性
<xsl:template match="ProductType">
  <xsl:element name="{text()}">
    <xsl:apply-templates select="Features/Feature" />
  </xsl:elemment>
</xsl:template>

<xsl:template match="Features/Feature">
  <xsl:element name="{@Name}">
    <xsl:value-of select="text()" />
  </xsl:elemment>
</xsl:template>