在XSLT中,我有一个循环表,希望将列标题放在行集合的顶部,但它们位于每一行的上方。

在XSLT中,我有一个循环表,希望将列标题放在行集合的顶部,但它们位于每一行的上方。,xslt,Xslt,我的xml输入如下所示: <Message> <ORC> <Id>3</Id> <PlacerOrderId>ORD723222-4</PlacerOrderId> </ORC> <OBR> <Id>4</Id> <OBRSetid>1</OBRSetid>

我的xml输入如下所示:

<Message>
    <ORC>
        <Id>3</Id>
        <PlacerOrderId>ORD723222-4</PlacerOrderId>
    </ORC>
    <OBR>
        <Id>4</Id>
        <OBRSetid>1</OBRSetid>
    </OBR>
    <OBX>
        <Id>5</Id>
        <OBXSetId>1</OBXSetId>
    </OBX>
    <OBX>
        <Id>6</Id>
        <OBXSetId>2</OBXSetId>
    </OBX>
    <OBX>
        <Id>7</Id>
        <OBXSetId>3</OBXSetId>
    </OBX>
    <ORC>
        <Id>9</Id>
        <PlacerOrderId/>
    </ORC>
    <OBR>
        <Id>10</Id>
        <OBRSetid>2</OBRSetid>
    </OBR>
    <OBX>
        <Id>11</Id>
        <OBXSetId>1</OBXSetId>
    </OBX>
    <OBX>
        <Id>12</Id>
        <OBXSetId>2</OBXSetId>
    </OBX>
    <OBX>
        <Id>13</Id>
        <OBXSetId>3</OBXSetId>
    </OBX>
    <ORC>
        <Id>14</Id>
        <PlacerOrderId/>
    </ORC>
    <OBR>
        <Id>15</Id>
        <OBRSetid>3</OBRSetid>
    </OBR>
    <OBX>
        <Id>16</Id>
        <OBXSetId>1</OBXSetId>
    </OBX>
    <OBX>
        <Id>17</Id>
        <OBXSetId>2</OBXSetId>
    </OBX>
    <OBX>
        <Id>18</Id>
        <OBXSetId>3</OBXSetId>
    </OBX>
    <ORC>
        <Id>19</Id>
        <PlacerOrderId/>
    </ORC>
    <OBR>
        <Id>20</Id>
        <OBRSetid>4</OBRSetid>
    </OBR>
    <OBX>
        <Id>21</Id>
        <OBXSetId>1</OBXSetId>
    </OBX>
    <OBX>
        <Id>22</Id>
        <OBXSetId>2</OBXSetId>
    </OBX>
    <OBX>
        <Id>23</Id>
        <OBXSetId>3</OBXSetId>
    </OBX>
</Message>

3.
ORD723222-4
4.
1.
5.
1.
6.
2.
7.
3.
9
10
2.
11
1.
12
2.
13
3.
14
15
3.
16
1.
17
2.
18
3.
19
20
4.
21
1.
22
2.
23
3.
输出应将表格标题置于OBX行上方,如以下输出所示:

<ORC>3 ORD723222-4</ORC>
<OBR>4 1</OBR>
<Heading>ID</Heading>
<OBX>5 </OBX>
<OBX>6 </OBX>
<OBX>7 </OBX>
<ORC>9 </ORC>
<OBR>10 2</OBR>
<Heading>ID</Heading>
<OBX>11 </OBX>
<OBX>12 </OBX>
<OBX>13 </OBX>
<ORC>14 </ORC>
<OBR>15 3</OBR>
<Heading>ID</Heading>
<OBX>16 </OBX>
<OBX>17 </OBX>
<OBX>18 </OBX>
<ORC>19 </ORC>
<OBR>20 4</OBR>
<Heading>ID</Heading>
<OBX>21 </OBX>
<OBX>22 </OBX>
<OBX>23 </OBX>
3 ORD723222-4
4 1
身份证件
5.
6.
7.
9
10 2
身份证件
11
12
13
14
15 3
身份证件
16
17
18
19
20 4
身份证件
21
22
23
我的代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

<xsl:output indent="yes"/>

<xsl:template match="/">
    <xsl:apply-templates select="/Message/*[self::ORC or self::OBR or self::OBX]"/>
</xsl:template>

<xsl:template match="ORC">
    <xsl:copy>
        <xsl:value-of select="Id"/><xsl:text> </xsl:text>
        <xsl:value-of select="PlacerOrderId"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="OBR">
    <xsl:copy>
        <xsl:value-of select="Id"/><xsl:text> </xsl:text>
        <xsl:value-of select="OBRSetid"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="OBX">
    <xsl:copy>
        <xsl:value-of select="Id"/><xsl:text> </xsl:text>
        <xsl:value-of select="OBXSetid"/>
    </xsl:copy>
</xsl:template>


我将表头代码放在OBX模板中,但它出现在每个OBX行的上方,而不是每组OBX行的开头。在哪里可以放置表格标题,使其显示在正确的位置?

尝试将匹配的模板
OBX
更改为:

<xsl:template match="OBX">
    <xsl:if test="not(preceding-sibling::*[1][self::OBX])">
        <Heading>ID</Heading>
    </xsl:if>
    <xsl:copy>
        <xsl:value-of select="Id"/><xsl:text> </xsl:text>
        <xsl:value-of select="OBXSetid"/>
    </xsl:copy>
</xsl:template>

身份证件
注:
1.由于缺少根元素,样式表当前输出的XML无效
2.XML区分大小写,
OBXSetid
选择