我正在寻找一种方式,以每两个元素结合在一起使用XPath2.0:
<item>
<element class='1'>el1</element>
<element class='2'>el2</element>
<break>break</break>
<element class='1'>el3</element>
<element class='2'>el4</element>
<break>break</break>
<element class='1'>el5</element>
<element class='2'>el6</element>
<break>break</break>
<element class='1'>el7</element>
<element class='2'>el8</element>
</item>
我希望结果会是这样:
el1el2
el3el4
el5el6
el7el8
在两个有意义的元素之间的“断裂”,而也有类助阵,但我仍然无法完成它。
由于我不熟悉使用XPath,这是我能想出这么远,而且被证明是错误的,因为连击至少需要两个参数...
//item/concat(element[preceding-sibling::break | following-sibling::break])
//item/element[@class='1']/concat(., following-sibling::element[1])
您想要您的结果序列包含一个项目的每个的class='1'
的元件,该项目是该元素的级联和其下一个兄弟的值(匹配class='2'
)。
我不知道,如果你还开了一个XSLT 1.0解决方案,但这个工作对我来说你输入XML:
<xsl:template match="/item">
<xsl:apply-templates select="element[1]|break"/>
</xsl:template>
<xsl:template match="element[1]">
<xsl:text>
</xsl:text>
<xsl:value-of select="."/>
<xsl:value-of select="following-sibling::*[1]"/>
</xsl:template>
<xsl:template match="break">
<xsl:text>
</xsl:text>
<xsl:value-of select="following-sibling::*[1]"/>
<xsl:value-of select="following-sibling::*[2]"/>
</xsl:template>
我有匹配任何开始元素或休息元素两个模板。 我用的是以下同辈轴去接下来的两个元素。 所述<xsl:text>
元素是有强制断行。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="item">
<xsl:for-each-group select="*" group-starting-with="break">
<xsl:if test="current-group()[1][self::break]">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="current-group()[self::element]" separator=""/>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>