2017-02-22 6 views
1

XSLTを使用して.xsdファイルを解析しています。私の問題は、私が を使用している現在のノードで見つけたので、出力データを書き込むことができることだけです。XSLT親ノードにデータを渡す方法

ノードから祖先ノードにデータを送信する方法はありますか。

私が得意とする簡単な例です。

- 私の現在のコード: -

<xsl:template match="complexType"> 
    <xsl:text>struct </xsl:text> 
    <xsl:text>T_</xsl:text> 
    <xsl:value-of select"current/@name"/> 
    <xsl:text>{</xsl:text> 
    <xsl:text>&#xa;</xsl:text> 

    <xsl:apply-templates select="sequence"/> 

    <xsl:text>};</xsl:text> 
</xsl:template> 

<xsl:template match="sequence"> 
    <xsl:apply-templates select="element"/> 
</xsl:template> 

<xsl:template match="element"> 
    <xsl:value-of select"current/@type"/> 
    <xsl:text> </xsl:text> 
    <xsl:value-of select"current/@name"/> 
</xsl:template> 

- 私のソースファイル -

<complexType name="cp_name"> 
<sequence> 
    <element name="el_name" type="int" minOccurs="1" maxOccurs="1"> 
    </element> 
</sequence> 
</complexType> 

- 私の現在の出力: -

struct T_cp_name 
{ 
int el_name; 
}; 

- 望ましい出力 -

<!-- // First, use some data from the inner node (element) --> 

typedef int Type_in_element; 

<!-- // Then, use a combination of data from both the inner and the --> 
<!-- // ancestor node (complexType) --> 

struct T_cp_name 
{ 
    Type_in_element el_name; // data from the inner node (<element>) 
}; 

答えて

0

使用この

<xsl:template match="complexType"> 
     <xsl:text>typedef </xsl:text> 
     <xsl:value-of select="//*/@type"/> 
     <xsl:text> Type_in_</xsl:text> 
     <xsl:value-of select="//*[@type]/name()"/> 
     <xsl:text>;</xsl:text> 
     <xsl:text>&#xa;</xsl:text> 
     <xsl:text>struct </xsl:text> 
     <xsl:text>T_</xsl:text> 
     <xsl:value-of select="current()/@name"/> 
     <xsl:text>&#xa;</xsl:text> 
     <xsl:text>{</xsl:text> 
     <xsl:text>&#xa;</xsl:text> 
     <xsl:apply-templates select="sequence"/> 
     <xsl:text>};</xsl:text> 
    </xsl:template> 

    <xsl:template match="sequence"> 
     <xsl:apply-templates select="element"/> 
    </xsl:template> 

    <xsl:template match="element"> 
      <xsl:text>Type_in_</xsl:text> 
      <xsl:value-of select="name()"/> 
      <xsl:text> </xsl:text> 
      <xsl:value-of select="@name"/> 
     <xsl:text>; &#xa;</xsl:text> 
    </xsl:template> 
+0

あなたの答えは、正確な例を解決しますが、私は例の は 内の任意の深で、任意の場所に存在する可能性がタグより一般的な解決のための を探していました木。 – fer

+0

あなたが答えを受け入れるよりもうまくいくならば。 – Rupesh

関連する問題