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