2011-01-10 2 views
1

サンプルXML入力ファイル:XSLTセットノード値親グループに

<sample>  
    <vars>  
     <var>  
      <name>connection1</name>  
      <value>tcp</value>  
     </var>  
     <var>  
      <name>connection2</name>  
      <value>ssl</value>  
     </var>  
    </vars>  
</sample> 

他の質問を見たが、私は使用することができる午前の例を見ていない、と答えました。上記のxmlファイルを処理して、名前ノードに応じてノード値を編集したいとします。

名前=接続1を見つけ、SSLに

出力

<sample>  
    <vars>  
     <var>  
      <name>connection1</name>  
      <value>ssl</value>  
     </var>  
     <var>  
      <name>connection2</name>  
      <value>ssl</value>  
     </var>  
    </vars>  
</sample> 
+0

良い質問、+1。最短の解決方法と、最も基本的なXSLTデザインパターン(アイデンティティルールパターン)の説明については、私の答えを見てください。 –

答えて

1

おそらく最短溶液がこのある:この変換が提供されるXML文書に適用される場合

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<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= 
"var[name='connection1']/value/text()">ssl</xsl:template> 
</xsl:stylesheet> 

<sample> 
    <vars> 
     <var> 
      <name>connection1</name> 
      <value>tcp</value> 
     </var> 
     <var> 
      <name>connection2</name> 
      <value>ssl</value> 
     </var> 
    </vars> 
</sample> 

希望、正しい結果がが生成されます。

<sample> 
    <vars> 
     <var> 
     <name>connection1</name> 
     <value>ssl</value> 
     </var> 
     <var> 
     <name>connection2</name> 
     <value>ssl</value> 
     </var> 
    </vars> 
</sample> 

説明:だけに必要な特定のノードをテンプレートマッチングすることにより、あるとして、すべてのノードをコピーするidentity ruleの使用とそのオーバーライド:

このソリューションは、最も基本的なXSLTデザインパターンを使用しています変更する。

+0

優れた、初心者のビットはxsltに、これはまさに何の後に、 –

0
<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="var[name = 'connection1']/value"> 
    <xsl:copy> 
    <xsl:text>ssl</xsl:text> 
    </xsl:copy> 
</xsl:template> 
0

を同じグループにある値を設定します。次のXSLTを使用することができますと一緒にXSL Identity Transformを使用

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

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="value[preceding-sibling::name = 'connection1']"> 
    <value>ssl</value> 
    </xsl:template> 
</xsl:stylesheet> 
0

を特定のケースを処理し、sslをtcpに置き換えるテンプレート。

関連する問題