Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
xml xsl重新组合值_Xml_Xslt - Fatal编程技术网

xml xsl重新组合值

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

我是XML/XSL的新手,尝试将XML转换为另一种XML格式。 我有一个filemaker导出,我必须转换它。XML看起来是这样的

<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>