Xalan redirect: write, используйте любое из двух значений элемента для создания имени нового XML-файла в зависимости от нулевых значений - PullRequest
1 голос
/ 27 мая 2010

Итак, у меня есть следующий код:

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

Где " filename " - это тег в источнике xml. Моя проблема возникает, когда имя файла пустое или пустое. И это касается нескольких тегов имени файла 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')">

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

1 Ответ

2 голосов
/ 27 мая 2010

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

<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> внутри тела переменной.

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