当我使用换行符时出现空白行

时间:2015-06-02 22:08:17

标签: xml xslt xslt-1.0

我的XML如下所示:

<Description>
<LongDescription>a</LongDescription>
<LongDescription>b</LongDescription>
<LongDescription>c</LongDescription>
</Description>

所需的输出是:

<Description>
<LongDescription>a
 b
 c</LongDescription>
</Description>

我使用以下代码来获取输出:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
  <xsl:output omit-xml-declaration="no" indent="yes" />
  <xsl:strip-space elements="*" />

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

  <xsl:template match="Description">
    <xsl:copy>
      <xsl:apply-templates select="*[not(self::LongDescription)]" />
      <LongDescription>
        <xsl:apply-templates select="LongDescription/text()" />
      </LongDescription>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="LongDescription/text()">
    <xsl:if test="position() &gt; 1"></xsl:if>
    <xsl:text>&#xA;</xsl:text>
    <xsl:value-of select="."/> 
  </xsl:template>
</xsl:stylesheet>

但是使用这个我得到的结果为:

<?xml version="1.0" encoding="UTF-8"?>
<Description>
<LongDescription>
a
b
c</LongDescription>
</Description>

除了LongDescription之外,我希望“a”不在下一行。

我尝试过使用strip和normalize选项,但它不起作用。

但这些选项无效。

任何人都可以尽快帮助我。

先谢谢, ANKIT

2 个答案:

答案 0 :(得分:1)

我刚删除了LongDescription中的新行

  <LongDescription><xsl:apply-templates select="LongDescription/text()" />
  </LongDescription>

这个模板有点奇怪,应该是这样的:

<xsl:template match="LongDescription/text()">
  <xsl:if test="position() &gt; 1"><xsl:text>&#xA;</xsl:text></xsl:if>
  <xsl:value-of select="."/> 
</xsl:template>

答案 1 :(得分:0)

最简单的方法是 -

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:output omit-xml-declaration="no" indent="yes" />
    <xsl:strip-space elements="*" />

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

    <xsl:template match="Description">
        <xsl:copy>
           <LongDescription>
                <xsl:apply-templates select="LongDescription/text()" />
            </LongDescription>
        </xsl:copy>
    </xsl:template>

   <xsl:template match="LongDescription[1]/text()" priority="1">
        <xsl:value-of select="."/> 
    </xsl:template>

    <xsl:template match="LongDescription/text()">
        <xsl:text>&#xA;</xsl:text><xsl:value-of select="."/> 
    </xsl:template>

</xsl:stylesheet>

<强> OUTPUT -

<?xml version="1.0" encoding="UTF-8"?>
<Description>
   <LongDescription>a
b
c</LongDescription>
</Description>