2017-06-22 12 views
0

以外のすべての一致:XSLテンプレートは、私はこのようになりますスニペットとXSL持って何か

<xsl:template match="group"> 
<xsl:element name="group"> 
<xsl:copy-of select="*"/> 
</xsl:element> 
</xsl:template> 

をしかし、私はそれがtypevalue「RECORD」を持つものを除くすべてのグループをコピーする必要があります。これはどうすればいいですか? XSL 1.0と2.0の両方を使用することができ、1.0を優先します。ソースファイルには、数千のグループがあり、4〜5の異なるタイプ値があります。コードでは、タイプ値レコードなしのグループのみを選択します。ここで

を濾過除去しなければならない例のグループがあります:すべてと任意の助け

<group recstatus="1"> 
    <sourcedid> 
     <source>system_owner_28f57240-5e2b-44af-8e62-fbf9aa6b6165</source> 
     <id>basic_groups_69782a81-042d-4717-b9e4-18abacb306b7</id> 
    </sourcedid> 
    <grouptype> 
     <scheme>Unique</scheme> 
     <typevalue level="0">RECORD</typevalue> 
    </grouptype> 
    <description> 
     <short>Ipsum dipsum</short> 
    </description> 
    <relationship> 
     <sourcedid> 
     <source>system_owner_28f57240-5e2b-44af-8e62-fbf9aa6b6165</source> 
     <id>69782a81-042d-4717-b9e4-18abacb306b7</id> 
     </sourcedid> 
     <label>Ipsum dipsum</label> 
    </relationship> 
</group> 

多くの感謝!

+0

表示した入力例に対して、どのような出力をしたいですか? –

+0

マッチパターンを制限するのではなく、テンプレートを選択的に適用してこのフィルタリングを行う方がよいでしょう。さもなければ、一致しない 'group'はデフォルトテンプレートによって処理されます。 –

+0

私が不明なら謝罪します。ソースファイルには、数千のグループがあり、4〜5の異なるタイプ値があります。コードでは、タイプ値レコードなしのグループのみを選択します。 –

答えて

1

あなたは

<xsl:template match="/*"> 
    <xsl:copy> 
    <xsl:copy-of select="//group[not(grouptype/typevalue[level = 0] = 'RECORD')]"/> 
    </xsl:copy> 
</xsl:template> 

を使用している場合は、それらのgroup要素が子孫typevalueRECORDされていることを持っていないコピーしてください。

それとも、あなたはすべてをコピーするには恒等変換テンプレートを使用する場合、あなたは文字通りあなたの質問を取る空のテンプレート

<xsl:template match="group[grouptype/typevalue[level = 0] = 'RECORD']"/> 
+0

ありがとう、それはトリックを行うようです。残念なことに、xmlファイルには、保持する必要のある数千の要素も含まれています。これらもフィルタリングされています。 –

+0

次回は、XML入力の縮小された完全かつ最小のサンプル、あなたが持っているXSLT、必要な出力、そして問題を説明するサンプルを表示することを検討してください。私はあなたが削除したい要素をコピーしていないテンプレートを使って別のアプローチを示す答えを編集しました。残りの部分を処理する出発点としてコードにID変換テンプレートも入れていることを前提としています。 –

+0

私は、ありがとう。あなたの修正された答えは魅力のように働いた。 –

0

を解消したい要素をコピー避けるために、条件を逆に、最も直接的要件のXSLT表現は2つのテンプレートルールを持つことです。

ある
<xsl:template match="*[everything()]" priority="10"> 
    .. 
</xsl:template> 

<xsl:template match="*[something()]" priority="20"/> 

、「何か」にマッチし、何もしないルール、および「すべてを」と一致すると何かを、優先順位の低いルール。

関連する問題