真正的xml结构
<GTD>
<BLOCK>
<G44>
<G4403>1</G4403>
<G441>02001</G441>
<G442>N/A</G442>
<G443>2015-04-12</G443>
</G44>
<G44>
<G4403>1</G4403>
<G441>02015</G441>
<G442>143561</G442>
<G443>2015-07-28</G443>
</G44>
<G44>
<G4403>1</G4403>
<G441>03011</G441>
<G442>SRSC-3399709-2015</G442>
<G443>2014-12-01</G443>
</G44>
<G44>
<G4403>1</G4403>
<G441>02015</G441>
<G442>143537</G442>
<G443>2015-07-26</G443>
</G44>
<G44>
<G4403>1</G4403>
<G441>03012</G441>
<G442>1</G442>
<G443>2014-12-01</G443>
</G44>
</BLOCK>
<BLOCK>
...
</BLOCK>
</GTD>
结果XML中的我必须从每个 G44 获得 G441 = 02015 带逗号分隔符的连续字符串
<GTD>
<LINE>
<DOCNUMBER>
143561, 143537
</DOCNUMBER>
</LINE>
</GTD>
与另一个问题相关的问题(XSLT comma separation for sublist of list)
答案 0 :(得分:1)
不确定为什么要标记这个“复杂案例”;)。以下是使用XSLT执行此操作的方法:
<xsl:template match="/">
<GTD><LINE><DOCNUMBER>
<xsl:apply-templates select="GTD/BLOCK/G44[G441 = '02015']" />
</DOCNUMBER></LINE></GTD>
</xsl:template>
<xsl:template match="G44">
<xsl:value-of select="G442" />
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
这导致:
<GTD>
<LINE>
<DOCNUMBER>143561, 143537</DOCNUMBER>
</LINE>
</GTD>
根据您对PACKNUMBER
的评论
<xsl:template match="/">
<GTD><LINE>
<DOCNUMBER>
<xsl:apply-templates select="GTD/BLOCK/G44[G441 = '02015']" />
</DOCNUMBER>
<PACKNUMBER>
<xsl:apply-templates select="GTD/BLOCK/G44[G441 = '02001']" />
</PACKNUMBER>
</LINE></GTD>
</xsl:template>
<xsl:template match="G44[G441 = '02015']">
<xsl:value-of select="G442" />
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="G44[G441 = '02001']">
<xsl:value-of select="G441" />
<xsl:text>, </xsl:text>
<xsl:value-of select="G443" />
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
您可以决定是要重复谓词还是切换模式。但基本上,这样做的方法是:
如果重叠(为另一个集合生成相同的输出),您可以使用match="G44[G441 = '02015' or G441 = 'xyz]">
在一个中添加多个匹配。