2016-09-22 12 views
0

に基づいて選択します。私は、再より多くの言語Iを添加することができたので、次の結果XSLT親、私は次のXML持つ現在のノード名

<backgroundImgage> 
    <en x="60">filename_en.png</en> 
    <de x="70">filename_de.png</de> 
</backgroundImage> 

を取得し、それを書いてみる

<field_x_position> 
    <en is_array="true"> 
    <value>60</value> 
    </en> 
    <de is_array="true"> 
    <value>70</value> 
    </de> 
</field_x_position> 

<field_background_image> 
    <de is_array="true"> 
    <filename>filename_de.png</filename> 
    </de> 
    <en is_array="true"> 
    <filename>filenmae_en.png</filename> 
    </en> 
</field_background_image> 

をそれらをループする必要があります。 XPath式のname(。)が正しく機能しないため、対応する要素の一致する値を選択するにはどうすればよいですか。

<xsl:element name="bgImage"> 
    <xsl:for-each select="field_background_image/*"> 
    <xsl:element name="{name(.)}"> 
     <xsl:attribute name="x"> 
     <xsl:value-of select="../../field_x_position/name(.)/item/value"/> 
     </xsl:attribute> 
     <xsl:value-of select="item/filename"/> 
    </xsl:element> 
</xsl:for-each> 

あなたの助けをありがとうございました。

答えて

1

あなたが探している表現であるこの

<xsl:value-of select="../../field_x_position/*[name() = current()/name()]/value"/> 

はまた少し簡単にするために、変数を利用して(そこにあなたのXMLにはitem要素ではありませんので、私はまた、式からこれを削除していることに注意してください)それ。私は、相互参照を解決するためのXSLT's built-in keyメカニズムを使用することをお勧めし、このXSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml" indent="yes" /> 

    <xsl:template match="/*"> 
     <xsl:element name="bgImage"> 
      <xsl:for-each select="field_background_image/*"> 
       <xsl:variable name="name" select="name()" /> 
       <xsl:element name="{$name}"> 
        <xsl:attribute name="x"> 
         <xsl:value-of select="../../field_x_position/*[name() = $name]/value"/> 
        </xsl:attribute> 
        <xsl:value-of select="filename"/> 
       </xsl:element> 
      </xsl:for-each> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
+0

ありがとうございます!完璧に動作します。 –

0

をお試しください:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:key name="x" match="field_x_position/*" use="name()" /> 

<xsl:template match="/*"> 
    <backgroundImage> 
     <xsl:for-each select="field_background_image/*"> 
      <xsl:element name="{name()}"> 
       <xsl:attribute name="x"> 
        <xsl:value-of select="key('x', name())/value"/> 
       </xsl:attribute> 
       <xsl:value-of select="filename"/> 
      </xsl:element> 
     </xsl:for-each> 
    </backgroundImage> 
</xsl:template> 

</xsl:stylesheet> 
関連する問題