使用此输入
<?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
答案 0 :(得分:4)
您需要xml:space="preserve"
属性来维持xml:text
内的回车,并且您需要在h1
和h2
标记的内容之前和之后回车:< / 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 senstence
,this is another sentence
)在不同的行上正确输出(使用Visual Studio 2012执行XSLT)。
您写的只有h
标记应该添加了回车符 - 您的样本some paragraph
和another paragraph
都在p
标记中,因此不会添加回车符它们在同一行输出。