输入包含需要删除的段落字符

时间:2012-09-14 15:03:35

标签: xslt xslt-1.0

我一直在尝试从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

1 个答案:

答案 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