With this input
<?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>
I need to apply XSL style sheet to obtain just the plain text, honor the line breaks, and remove preceeding white space. So, after searching online for a few samples, I tried this, but it does not work for me. Sorry, Im not familiar with XSL and thought I'd ask.
Attempted XSL, but it does not work. Any ideas?
<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>
This is the output after applying XSL. As you can see, its all one line, not carriage returns.
This is a sentence this is another sentence m H2some paragraphTanother paragraph
This is the output I'd like to get. Text within H1|H2|H3 should have a line break before and after.
This is a sentence 
this is another sentence 
my H2
some paragraph
another paragraph
You need a xml:space="preserve" attribute to maintain the carriage return within xml:text, and you need a carriage return before and after the content of h1 and h2 tags:
<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>
The initial text (This is a senstence, this is another sentence) is output correctly on separate lines in my case (using Visual Studio 2012 to execute the XSLT).
You write that only h tags should have the carriage return added - in your sample some paragraph and another paragraph are in p tags, so no carriage returns are added and they are output on the same line.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With