我需要找出两个节点之间是否存在任何问题.我的 XML看起来像这样: event value1="1" value2="2" value3="3" info="some info here" Line 1.lb/ Line 2.lb/lb/ Line 3.lb/ Line 4.lb//event 我的目标是转换 lb /节点到
<event value1="1" value2="2" value3="3" info="some info here"> Line 1.<lb/> Line 2.<lb/><lb/> Line 3.<lb/> Line 4.<lb/> </event>
我的目标是转换< lb />节点到< br />使用XSLT的HTML标记.但是还有一个额外的要求.如果有一个< lb />直接跟随另一个< lb />我想只输出一个< br />.
我的XSLT看起来像这样:
<xsl:template match="lb"> <xsl:if test="not(preceding-sibling::lb[1])"> <br/> </xsl:if> </xsl:template>
上面的XSLT的问题在于它仅对第1行正常工作,因为忽略了两个节点之间的文本.
也许有人可以提供帮助.
编辑:另一种更有效的方法是:<xsl:template match="lb"> <xsl:if test="following-sibling::node()[1][not(self::lb)]"> <br/> </xsl:if> </xsl:template>
试试这个:
<xsl:template match="lb"> <xsl:if test="generate-id()=generate-id(preceding-sibling::text()[1]/following-sibling::lb[1])"> <br/> </xsl:if> </xsl:template>
基本上这会检查你是否在第一个< lb />以前的文本兄弟节点,这也意味着它只会添加< br />在一些文字之后,但是如果< lb />位于父标记的开头.