Как определить теги в теле переменной - PullRequest
0 голосов
/ 19 сентября 2009

У меня есть следующий 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, это значение печатается успешно, но; если этот тег не содержит значения, xsl vairalbe «таблица» должна содержать следующее:

<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 ]

3 голосов
/ 19 сентября 2009

xsl: value-of выведет текстовое значение выбранного содержимого, используйте xsl: copy-of для вывода всего содержимого, включая любые узлы.

<xsl:copy-of select="$table" />
0 голосов
/ 19 сентября 2009

Сделайте следующее вместо <Exception>:

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

Это должно сгенерировать ваш <Exception> элемент XML. Удалите теги <xsl:text>, если вам нужны новые строки, окружающие текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...