我一直在尝试从xsl中修改父元素的文本。如何从XSL代码中删除
元素(我不控制输入)。我只想删除前面的换行符,而不是删除正文中的所有换行符。前面的一些文字在这里'可以采用多段的形式。
XSL
<xsl:template match="element">
<!-- attempting to add fix here -->
<xsl:apply-templates />
</xsl:template>
输入
<body>
<p>
some text here
</p>
<element>
some more text
</element>
</body>
输出
some text here
some more text
所需输出
some text here some more text
答案 0 :(得分:1)
确实
<xsl:template match="p[following-sibling::*[1][self::element]]//text() | element[preceding-sibling::*[1][self::p]//text()">
<xsl:value-of select="normalize-space()"/>
</xsl:template>
做你想做的事吗?
您不需要<xsl:template match="element"><xsl:apply-templates/></xsl:template>
,因为内置模板无论如何都会这样做。
我找到了一些时间来测试代码,现在我已经
了<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="p[following-sibling::*[1][self::element]]//text() |
element[preceding-sibling::*[1][self::p]]//text()">
<xsl:value-of select="normalize-space()"/>
</xsl:template>
<xsl:template match="text()[preceding-sibling::*[1][self::p] and following-sibling::*[1][self::element] and not(normalize-space())]">
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
变换
<body>
<p>
some text here
</p>
<element>
some more text
</element>
</body>
到
some text here some more text