2017-05-29 13 views
0

特定の属性値を持つ特定のノードがある場合は、xslt変換をスキップします。特定のプロパティを持つ特定のノードがある場合、xslt変換をスキップしてください。

サンプルXML 1:

<root> 
<div class = "noEdit"/> 
<name value= "ABC"/> 
<address value= "ABC"/> 
</root> 

サンプルXML 2:

<root> 
<div class = "Edit"/> 
<name value= "ABC"/> 
<address value= "ABC"/> 
</root> 

だから今、私はこれらの2つのXMLの、私はサンプル1の場合にXSLT変換を適用したいが、中には適用されませんしていますサンプル2の場合divタグのclass属性の値に基づいて条件が決定されます。私のサンプルXSLTは現在

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0"> 
<xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="@ | node()"> 
<xsl:copy> <xsl:apply-template select="@*|node()"/> 
</xsl:copy> 
<xsl:template match="name" > 
    <TransformedName><xsl:value-of select="value"/></TransformedName> 
</xsl:template> 
<xsl:template match="address" > 
    <Transformedaddress><xsl:value-of select="value"/></Transformedaddress> 
</xsl:template> 

です。上記のXSLTはどちらの場合でも動作します。 1の解決策は、名前と住所のテンプレートマッチングの両方にDIVの前の節を付けることですが、元のXSLTのアドレスと名前のようなノードが多すぎるため、オーバーヘッドとコードの重複になります。

答えて

0

は、次のテンプレートを追加することができます。

<xsl:template match="/root[div/@class='noEdit']"> 
    <xsl:copy-of select="."/> 
</xsl:template> 

これは、入力と同じである出力が得られ、あなたの最初の例ではroot要素を傍受し、それ以上のテンプレートが適用されて停止します。


こと注:

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

は次のようになります。

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

私は<のxsl追加する場合:テンプレートの一致= "/ルート[DIV/@クラスは、= 'noEdit']"/>私のxsltで、Sample xml 1の出力が空白になっています。すべての元のタグとその属性を含む出力を入力と同じにします。 –

+0

"*入力と同じ出力をしたい*"これはあなたの質問から理解できないと思います。とにかく、私は自分の答えを修正しました。 –

+0

ありがとう、私はかなりXSLTを新しくして、私は言語の流れを理解するのに苦労しています。あなたは、言語の理解を深めるために、私にいくつかのリソース(w3とチュートリアルのポイントを除いて、私はそれらを通ってきました)を提案できますか? –

関連する問題