2016-06-25 8 views
0

私のXMLファイルにこの1XSL:XML属性値を持つアクセス変数値

<COLUMN name="CATEGORY_" type="VARCHAR_M"/> 

のような線を有します。私はデータベースに依存するデータ型とVARCHAR_Mを交換したいXLSTファイルの助けを借りて 。したがって、私は

 <xsl:choose> 
     <xsl:when test="$DatabaseSystem = 'DB2'"> 
      <xsl:variable name="VARCHAR_S" select="'varchar(64)'"/> 
      <xsl:variable name="VARCHAR_M" select="'varchar(255)'"/> 
      <xsl:variable name="VARCHAR_B" select="'varchar(4000)'"/> 
      <xsl:variable name="INTEGER" select="'integer'"/> 
     </xsl:when> 
     <xsl:when test="$DatabaseSystem = 'Informix'"> 
      <xsl:variable name="VARCHAR_S" select="'varchar(64)'"/> 
      <xsl:variable name="VARCHAR_M" select="'varchar(255)'"/> 
      <xsl:variable name="VARCHAR_B" select="'lvarchar(4000)'"/> 
      <xsl:variable name="INTEGER" select="'integer'"/> 
     </xsl:when> 
    </xsl:choose> 

を設定している

<xsl:value-of select="@type"/> 

私にXMLから属性の値を与えるが、どのように私は、変数の名前としてこれを使用することができます。この?

<xsl:value-of select="[email protected]"/> 

よう

何か。

+1

あなたの変数は、単に 'XSLの内部で定義されている、私は思う異なるアプローチを選択する必要があります:when'ので、あなたも外でそれらにアクセスすることはできません。動的XPath評価は、XSLT 1.0および2.0の言語の一部ではありません。あなたが値を選択することができる方法、:あなたは(ノード-set'またはXSLT 1.0で同様のあなたは 'exslが必要な場合があります)XML構造に値を格納し、その構造から選択することをお勧めします。 –

+0

「*私は、データベースに依存するデータ型とVARCHAR_Mを交換したい。*」私はそれにつながるあなたのコードには何も表示されません。私はここで(入力のより完全な例で)適用する必要がある**ロジック**について説明することをお勧めします。現在、これは[XY質問](http://xyproblem.info/)のようです。 –

答えて

0

あなたが< XSLを捨てる場合:選んだ>とxmlのように、あなたがこのような何かを行うことができ、同じデータに置き換える...

<xsl:variable name="map"> 
    <db databaseSystem='DB2'> 
     <type name="VARCHAR_S">varchar(64)</type> 
     <type name="VARCHAR_M">varchar(255)</type> 
     <type name="VARCHAR_B">varchar(400)</type> 
     <type name="INTEGER">integer</type> 
    </db> 
    <db databaseSystem='Informix'> 
     <type name="VARCHAR_S">varchar(64)</type> 
     <type name="VARCHAR_M">varchar(255)</type> 
     <type name="VARCHAR_B">varchar(400)</type> 
     <type name="INTEGER">integer</type> 
    </db> 
</xsl:variable> 

あなたがそのようにのような値を拾うことができます。.. 。

<xsl:value-of select="$map/db[@databaseSystem='DB2']/type[@name='VARCHAR_M']"/> 

Clerlyあなたは、固定文字列を使用することに文句を言わないと、独自のコードでは、あなたはあなた「このような持つライン」への変数または参照で「DB2」と「VARCHAR_M」を置き換えることでしょう入力

関連する問題