1

だから私は次のコードを持っています:

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

filename」は、xml ソース内のタグです。ファイル名が 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 コードをコンパイルすると、Variable not resolvable: tempNameというNPEが発生するようです。

4

1 に答える 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>変数の本体の内部を使用して実装されます。

于 2010-05-26T21:46:58.190 に答える