如何使用XSL获取纯文本和换行符

时间:2013-08-08 11:51:41

标签: xslt

使用此输入

<?xml version="1.0" encoding="UTF-8"?> <data> 
This is a senstence   
this is another sentence

<section>
        <!--comment --><h2>my H2</h2>     <p>some paragraph</p>             <p>another paragraph</p>                 
    </section> </data>

我需要应用XSL样式表来获取纯文本,遵守换行符,并删除前面的空格。所以,在网上搜索了几个样本后,我尝试了这个,但它对我不起作用。对不起,我不熟悉XSL并且认为我会问。

尝试过XSL,但它不起作用。有什么想法吗?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="UTF-8"/>
    <xsl:strip-space elements="*" />

        <xsl:template match ="@* | node()">
            <xsl:copy>
                <xsl:apply-templates select="@* | node()"/>
            </xsl:copy>    
        </xsl:template>

        <xsl:template match="h1|h2">
            <xsl:text>
            </xsl:text>
            <xsl:copy>
                <xsl:apply-templates select="@* | node()"/>
            </xsl:copy>  
        </xsl:template>
</xsl:stylesheet>

这是应用XSL后的输出。 正如你所看到的,它是一行,而不是回车。

This is a sentence this is another sentence m H2some paragraphTanother paragraph

这是我想要的输出。 H1 | H2 | H3中的文本应该在之前和之后有换行符。

This is a sentence 
this is another sentence 

my H2

some paragraph
another paragraph

1 个答案:

答案 0 :(得分:4)

您需要xml:space="preserve"属性来维持xml:text内的回车,并且您需要在h1h2标记的内容之前和之后回车:< / p>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="UTF-8"/>
  <xsl:strip-space elements="*" />

  <xsl:template match ="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="h1|h2">
    <xsl:text xml:space="preserve">
</xsl:text>
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
    <xsl:text xml:space="preserve">
</xsl:text>
  </xsl:template>
</xsl:stylesheet>

在我的案例中,初始文本(This is a senstencethis is another sentence)在不同的行上正确输出(使用Visual Studio 2012执行XSLT)。

您写的只有h标记应该添加了回车符 - 您的样本some paragraphanother paragraph都在p标记中,因此不会添加回车符它们在同一行输出。