Xslt XML到表,如何将上下文节点的position()获取到指定的祖先
我有这样的xml:Xslt XML到表,如何将上下文节点的position()获取到指定的祖先,xslt,Xslt,我有这样的xml: <A1> <B1> <C1> <C2> <C3> </B1> <B2> <C4> <C5> <C6> </B2> </A1> <A2> <B3> <C7> <C8> <C9> &l
<A1>
<B1>
<C1>
<C2>
<C3>
</B1>
<B2>
<C4>
<C5>
<C6>
</B2>
</A1>
<A2>
<B3>
<C7>
<C8>
<C9>
</B3>
<B4>
<C10>
<C11>
<C12>
</B4>
</A2>
我需要将其转换为具有嵌套行的表:
<table border="yes">
<tr>
<td>A1</td>
<td>B1</td>
<td>C1</td>
</tr>
<tr>
<td></td>
<td></td>
<td>C2</td>
</tr>
<tr>
<td></td>
<td></td>
<td>C3</td>
</tr>
<tr>
<td></td>
<td>B2</td>
<td>C3</td>
</tr>
<tr>
<td></td>
<td></td>
<td>C4</td>
</tr>
A1
地下一层
C1
C2
C3
地下二层
C3
补体第四成份
A和B仅当它们是新的(不是在每一行中重复)时才出现
我正在尝试使用position()
似乎我们应该模仿祖先的position()。
对于任意数量的嵌套行,是否有一个通用的解决方案?您可能需要以下内容(如果我正确理解了您的问题):
作为第一个测试(而不是使用
generate-id()
)。请您更好地解释一下好吗?为什么从B2和C3以上开始的节点不应出现在输出中?生成输出的规则不清楚。下面的答案很合适,谢谢。其思想是每个节点A和B在表中只出现一次。不重复。
<xsl:template match="c">
<tr>
<td>
<xsl:if test="IT IS THE FIRST C IN A">
<xsl:value-of select="ancestor::A"/>
</xsl:if>
</td>
<td>
<xsl:if test="position(1)">
<xsl:value-of select="parent"/>
</xsl:if>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:template>
<xsl:template match="C">
<tr>
<td>
<xsl:if test="generate-id(ancestor::A/descendant::C[1]) = generate-id(.)">
<xsl:value-of select="ancestor::A"/>
</xsl:if>
</td>
<td>
<xsl:if test="not(previous-sibling::C)">
<xsl:value-of select=".."/>
</xsl:if>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="descendant::C"/>
</xsl:template>
not(previous-sibling::C) and not(../previous-sibling::B)