2010-05-26 5 views
1

Поэтому у меня есть следующий код:Xalan перенаправлять: писать, использовать одно из двух значений элементов, чтобы создать имя нового файла .xml в зависимости от нулевых значений

<redirect:write select="concat('..\\folder\\,string(filename),'.xml')"> 

Где «имя файла» является тег источник xml. Моя проблема возникает, когда filename имеет значение null или пустое. И это имеет место для нескольких тегов имени файла xml. Поэтому я пытаюсь реализовать метод проверки. Это то, что я сделал:

<xsl-if test = "filename != ''"> 
     <xsl:variable name = "tempName" select = "filename" /> 
     </xsl-if> 
     <xsl-if test ="filename = ''"> 
     <xsl:variable name = "tempName" select = "filenameB"/> 
     </xsl-if> 

<redirect:write select="concat('..\\folder\\,string($tempName),'.xml')"> 

Я, кажется, получают неработающими, когда я компилирую мой Java-код, говоря, что Переменная не разрешимы: tempName

+0

Вычислено: Используются команды выбора. Если кто-то хочет знать, как мне знать здесь. – Bilzac

+0

Хороший вопрос (+1). См. Мой ответ для полного решения. –

ответ

2

Это преобразование:

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

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

<xsl:template match="filename"> 
    <xsl:variable name="tempName"> 
    <xsl:choose> 
     <xsl:when test="text()"> 
     <xsl:value-of select="."/> 
     </xsl:when> 
     <xsl:otherwise>filenameB</xsl:otherwise> 
    </xsl:choose> 
    </xsl:variable> 

    <redirect:write select="..\\folder\\{$tempName}.xml"/> 
</xsl:template> 
</xsl:stylesheet> 

применительно к данному XML-документу:

<t xmlns:redirect="my:redirect"> 
    <filename>Z</filename> 
    <filename/> 
</t> 

производит разыскиваемого, правильный результат:

<t xmlns:redirect="my:redirect"> 
    <redirect:write select="..\\folder\\Z.xml" /> 
    <redirect:write select="..\\folder\\filenameB.xml" /> 
    </t> 

Обратите внимание: Всякий раз, когда значение переменной устанавливается на основе состояния, это условие выполняется с использованием <xsl:choose> внутри корпуса от переменной.

+1

хорошо один :). XSL - действительно удивительный язык. – Parth

 Смежные вопросы

  • Нет связанных вопросов^_^