XSLT上的自闭标记问题

时间:2014-11-17 10:51:53

标签: xslt

我使用下面的XSLT语法在我的XML文件中选择一些值并创建不同版本的XML文件,

<xsl:element name="FirstName">
  <xsl:value-of select="//Invoice//FirstName"/>
</xsl:element> 

我遇到的问题是当我的XML中有任何空值时,我的输出XML生成如下

<Invoice>
 <FirstName /> 
</Invoice>

我想在存在空值

时生成如下所示的XML文件
<Invoice>
 <FirstName>   </FirstName> 
</Invoice>

我如何在XSLT中执行此操作? 感谢

2 个答案:

答案 0 :(得分:2)

您可以输出评论,如

<xsl:comment/><xsl:value-of select="//Inoivce/FirstName"/>

这将导致输出

<FirstName><!-- --></FirstName>

哪个应该在下游工作得很好。

此技术有时用于强制script标记为非关闭,因为它们必须是:

<script src="foo.js"><xsl:comment/></script>

答案 1 :(得分:-1)

试试这个:

XML:

<root>
<name>
<FirstName>Kishan</FirstName>
<LastName>Kumar</LastName>
</name>

<name>
<FirstName></FirstName>
<LastName>Raj</LastName>
</name>
 </root>

XSLT:

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

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

<xsl:template match="FirstName">
    <xsl:choose>
        <xsl:when test="string-length(.) &gt; 0">
            <xsl:element name="FirstName">
                      <xsl:value-of select="."/>
            </xsl:element>
        </xsl:when>
        <xsl:otherwise>
            <xsl:element name="FirstName">
                      <xsl:text> </xsl:text>
            </xsl:element>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

</xsl:stylesheet>

输出:

    <?xml version="1.0" encoding="UTF-8"?>
<root>
   <name>
      <FirstName>Kishan</FirstName>
      <LastName>Kumar</LastName>
   </name>
   <name>
      <FirstName> </FirstName>
      <LastName>Raj</LastName>
   </name>
</root>