xml xsl重新组合值
我是XML/XSL的新手,尝试将XML转换为另一种XML格式。 我有一个filemaker导出,我必须转换它。XML看起来是这样的xml xsl重新组合值,xml,xslt,Xml,Xslt,我是XML/XSL的新手,尝试将XML转换为另一种XML格式。 我有一个filemaker导出,我必须转换它。XML看起来是这样的 <machineName> <DATA>Machine 1</DATA> <DATA>Machine 2</DATA> <DATA>Machine 3</DATA> <DATA>Machine 4</D
<machineName>
<DATA>Machine 1</DATA>
<DATA>Machine 2</DATA>
<DATA>Machine 3</DATA>
<DATA>Machine 4</DATA>
<DATA>Machine 5</DATA>
<DATA>Machine 6</DATA>
<DATA>Machine 7</DATA>
</machineName>
<machineType>
<DATA>12</DATA>
<DATA>15</DATA>
<DATA>31</DATA>
<DATA>44</DATA>
<DATA>14</DATA>
<DATA>12</DATA>
<DATA>54</DATA>
</machineType>
<machineBuilt>
<DATA>1982</DATA>
<DATA>1985</DATA>
<DATA>1977</DATA>
<DATA>1966</DATA>
<DATA>1999</DATA>
<DATA>1975</DATA>
<DATA>2001</DATA>
</machineBuilt>
机器1
机器2
机器3
机器4
机器5
机器6
机器7
12
15
31
44
14
12
54
1982
1985
1977
1966
1999
1975
2001
这就是它最终的样子:
<machine>
<name>Machine 1</name>
<machineType>12</machineType>
<machineBuilt>1982</machineBuilt>
</machine>
<machine>
<name>Machine 2</name>
<machineType>15</machineType>
<machineBuilt>1985</machineBuilt>
</machine>
<machine>
<name>Machine 3</name>
<machineType>31</machineType>
<machineBuilt>1977</machineBuilt>
</machine>
.... and so on
机器1
12
1982
机器2
15
1985
机器3
31
1977
.... 等等
我设法读取“machineName/Data”值,并使用xsl:for-each命令将它们转换为所需的格式。但我不知道如何读取循环中的其他值
有人能给我一个线索吗
谢谢你的帮助
dan解决此类“换位”问题的标准方法是选择一个第一级项,然后迭代其第二级子项,并为每个子项创建一个输出“行”,其中包含所有输入行中相应位置的数据。假设当前上下文是machineName
、machineType
和machineBuilt
的公共父元素:
<xsl:for-each select="machineName/DATA">
<xsl:variable name="pos" select="position()" />
<machine>
<name><xsl:value-of select="."/></name>
<type><xsl:value-of select="../../machineType/DATA[$pos]"/></type>
<built><xsl:value-of select="../../machineBuilt/DATA[$pos]"/></built>
</machine>
</xsl:for-each>
您可能会发现将三组并行的数据元素存储在单独的变量中更具可读性:
<xsl:variable name="machineName" select="machineName/DATA" />
<xsl:variable name="machineType" select="machineType/DATA" />
<xsl:variable name="machineBuilt" select="machineBuilt/DATA" />
<xsl:for-each select="$machineName">
<xsl:variable name="pos" select="position()" />
<machine>
<name><xsl:value-of select="$machineName[$pos]"/></name>
<type><xsl:value-of select="$machineType[$pos]"/></type>
<built><xsl:value-of select="$machineBuilt[$pos]"/></built>
</machine>
</xsl:for-each>