5

有了这个输入

<?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
4

1 回答 1

4

需要一个xml:space="preserve"属性来维护 内的回车,并且在和标签xml:text的内容前后需要一个回车:h1h2

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

在我的例子中(使用 Visual Studio 2012 执行 XSLT),初始文本 ( This is a senstence, this is another sentence) 在单独的行上正确输出。

您写道,只有h标签应该添加回车 - 在您的示例中some paragraph并且another paragraphp标签中,因此没有添加回车并且它们在同一行上输出。

于 2013-08-08T15:13:48.397 回答