XML:
<mode>
<submode>1</submode>
<submode>2</submode>
<submode>3</submode>
<submode>4</submode>
<submode>5</submode>
<submode>6</submode>
<submode>7</submode>
</mode>
<mode>
<submode>7</submode>
<submode>8</submode>
<submode>9</submode>
<submode>10</submode>
<submode>11</submode>
<submode>12</submode>
<submode>13</submode>
</mode>
<mode>
<submode>14</submode>
<submode>15</submode>
<submode>16</submode>
<submode>17</submode>
<submode>18</submode>
<submode>19</submode>
20</submode>
</mode>
Run Code Online (Sandbox Code Playgroud)
如何在这种结构中首先测试<submode>
每个<mode>
(我需要得到数字:1,7,14):
<xsl:template match="submode">
<xsl:if test="(parent::mode) and (...what?...)">
...
</xsl:if>
...
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
我不明白如何在这里使用position().
它通常不是真的是
position() = 1
计算true()
当前节点是否具有父模式,并且当前节点是其父节点的第一submode
个子节点.
position()
指定当前节点列表的位置,这是以不同的方式定义的,具体取决于指定select
属性的<xsl:apply-templates>
方式.
例如(假设提供的XML具有作为元素的父元素的top mode
元素),如果在处理以下内容时选择了模板:
<xsl:apply-templates select="/*/mode/submode[. = 3]"/>
然后
position() = 1
仅适用于第submode
一个mode
元素的第3 个子元素.
一个正确的答案:
parent::mode and not(preceding-sibling::submode)
或者,推荐:
有一个单独的模板:
<xsl:template match="mode/submode[1]">
在这种情况下,模板中的代码不需要检查当前节点是否是第一submode
个子节点- 这已经知道了.