2017-03-02 16 views
0

入力XML構造を除去しなければならない場合:XSLT:シーケンスの要素をチェックは、ケースを無視 - 現在のノードが

<ITEMS> 
    <ITEM> 
     <ITEMTYPE>FOO</ITEMTYPE> 
    </ITEM> 
    <ITEM> 
     <ITEMTYPE>BAR</ITEMTYPE> 
    </ITEM> 
</ITEMS> 

私はXSLTにパラメータとしてシーケンスを渡すことになります。シーケンス中にITEMTYPEが存在する場合、ノードはが削除され、である必要があります。また、大文字と小文字を区別しないで処理する必要があります。

私はXSLTの初心者です。私は以下のようにコード化しましたが、大文字と小文字を区別しないようにすることはできません。

<xsl:stylesheet version="2.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:fn="http://www.w3.org/2005/xpath-functions" 
       exclude-result-prefixes="#all"> 

    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 

    <xsl:param name="itemsToRemove"/> 


    <xsl:output omit-xml-declaration="yes"/> 

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

    <xsl:template match="ITEM"> 
     <xsl:variable name="currentItemType"> 
      <xsl:value-of select="itemType"/> 
     </xsl:variable> 
     <xsl:if test="not(fn:index-of($itemsToRemove, $currentItemType))"> 
      <xsl:copy> 
       <xsl:apply-templates select="node()|@*"/> 
      </xsl:copy> 
     </xsl:if> 
    </xsl:template> 

</xsl:stylesheet> 
+0

あるhttp://xsltransform.net/3NSSEvWで何'ITEMTYPE'比較の値、または要素の名前(あなたのXMLでは' ITEMTYPE'がありますが、あなたのXSLTでは 'itemType')は大文字小文字を区別しないでください。 –

答えて

2

あなたは、1つの方法は、iフラグでmatches機能を使用している、大文字と小文字を区別しない値の比較を使用する場合:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 

    <xsl:param name="itemsToRemove" select="'foo'"/> 

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

    <xsl:template match="ITEM[$itemsToRemove[matches(., current()/ITEMTYPE, 'i')]]"/> 
</xsl:transform> 

出力が

<ITEMS> 

    <ITEM> 
     <ITEMTYPE>BAR</ITEMTYPE> 
    </ITEM> 
</ITEMS> 
+0

コンパイル時に関数の電流が解決されているはずです(java.lang.IllegalStateException)。 net.sf.saxon.functions.CompileTimeFunction:41(null) @Martin Honnen:私はこのエラーで打っています。 Javaプログラム – HanuAthena

+0

エラーが発生したときに使用しているバージョンのSaxonを正確に教えていただけますか?コマンドラインからそのSaxonバージョンでコードを実行した場合にも発生しますか?他の人が問題を再現できるようにすべての詳細を表示する新しい質問を作成する必要があるかもしれません。 –

関連する問題