2017-08-08 47 views
0

以除去空间元素值我有两种类型的XML元素,一种类型是需要使用XSL

首先XML:

<Body> 
<h1>aaa</h1> 
<h1>bbb</h1> 
<h1>ccc</h1> 
</Body> 

第二XML:

<Body> 
<h1> </h1> 
<h1>aaa</h1> 
<h1>bbb</h1> 
</Body> 

XSL I” m使用为

<xsl:strip-space elements="h1"/> 

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

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

    <xsl:template match="h1"/> 

输出我是GE正确地拟合为第一XML作为像:

<Body> 
<h1>aaa bbb ccc</h1> 
</Body> 

但是,即使我用带空间元素作为H1用于第二XML,我发现了象下面这样:

<Body> 
<h1> aaa bbb</h1> 
</Body> 

预期输出像

<Body> 
<h1>aaa bbb</h1> 
</Body> 

需要删除h1的空格元素。但由于该标签,它甚至结合空间。我使用了优先级,并在模板中使用了单独的h1 [normalize-space()]标签。但它不工作。有任何方法可以避免这种情况。请建议。我使用的是XSLT 2.0和saxon-PE 9.6.0.7。在此先感谢

回答

0

需要删除h1的空格元素。

的空间,你看到的是第一h1元素的空间。它是第一个h1中的空字符串与第二个h1元素中的"aaa"字符串之间的分隔符。您可以通过执行验证这一点:

<xsl:template match="Body"> 
     <xsl:copy> 
     <h1><xsl:value-of select="h1" separator="-"/></h1> 
     </xsl:copy> 
</xsl:template> 

演示:http://xsltransform.net/pNmBy1v

要删除多余的空间,您可以排除空h1元素(马丁Honnen的建议我在写这一段时间),或应用normalize-space()到结果。

+0

谢谢@Michael。它为这个标签工作很好。我用这个标签

User501

1

我认为使用<h1><xsl:value-of select="h1[normalize-space()]"/></h1>而不是<h1><xsl:value-of select="h1"/></h1>应该是一个简单的修复。

+0

Thanks @Martin Honnen。它对这个标签工作正常

User501