如何在变量体中定义标记

时间:2009-09-18 20:37:37

标签: xslt

我有以下XML文件:

<?xml version="1.0"?>
<Table69>
</Table69>

想要读取元素“Table69”的主体,我使用了以下XSL文件:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml"/>
  <xsl:template match="/">    
    <xsl:variable name="table" >     
        <xsl:choose>
        <xsl:when test="normalize-space(.) != ''" >
           <xsl:value-of select="." />
        </xsl:when>
        <xsl:otherwise>
            <Exception>
                field was missing 
            </Exception>                 
        </xsl:otherwise>
        </xsl:choose>
    </xsl:variable>

    <Table id="69">
        <xsl:value-of select="$table" />
    </Table>

  </xsl:template>
</xsl:stylesheet>

问题是:当xml文件包含Table69 tage下的值时,此值将成功打印,但是; 当此标记不包含值时,xsl vairalbe“table”应包含以下内容:

<Exception>
    field was missing 
</Exception>    

但是,它不包括tage,这是转换的示例结果:

<?xml version="1.0"?>
<Table id="69">
    field was missing       <!-- where's the Exception tag surrounding the text field was missing ??? -->
</Table>

2 个答案:

答案 0 :(得分:3)

xsl:value-of将打印所选内容的文本值,使用xsl:copy-of输出包括任何节点在内的全部内容。

<xsl:copy-of select="$table" />

答案 1 :(得分:0)

执行以下操作而不是<Exception>

  <xsl:element name="Exception">
    <xsl:text>Field was missing</xsl:text>
  </xsl:element>

这应该生成您的<Exception> XML元素。 如果您需要文本周围的换行符,请移除<xsl:text>标记。