2016-09-14 9 views
1

特定の要素タイプを処理するためのテンプレートが必要です。
1つの要素タイプではなく、要素タイプのリストをパラメータとして提供したいと考えています。例えば。どのようにターゲット要素の種類のリストを処理するには?

<xsl:param name="element_type" select="'hdd;dvd-rom'"/> 

どのように入力する必要がありますか?

次はテンプレート(1つの要素タイプのみを処理する)です。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:xs="http://www.w3.org/2001/XMLSchema" 
       exclude-result-prefixes="xs" 
       version="2.0"> 

    <xsl:param name="element_type" select="'hdd'"/> 
    <xsl:param name="old_value" select="'2016'"/> 
    <xsl:param name="new_value" select="'xxxx'"/> 


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

    <xsl:template match="*[local-name() eq $element_type]/@name[contains(., $old_value)]"> 
     <xsl:attribute name="{name()}" select="replace(., $old_value, $new_value)"/> 
    </xsl:template> 

</xsl:stylesheet> 

以下はサンプルXMLです。あなたはシーケンスをしたい場合

<?xml version="1.0" encoding="utf-8"?> 
<desktop> 
    <hdd name="2016-1"/> 
    <dvd-rom name="2016-2"/> 
    <cd-rom name="2016-3"/> 
</desktop> 

答えて

1

その後、local-name() = $element_typeを使用し、その後select="'hdd', 'dvd-rom'"を使用し、(XSLT/XPathのにはリストが存在しません)。

あなたはあなたが<xsl:param name="element_type" select="'hdd;dvd-rom'"/>にそうであるようにカンマやセミコロンまたは類似した区切り文字で文字列を渡した後、シーケンスを取得するために<xsl:variable name="element_types" select="tokenize($element_type, ';')"/>を使用する方が簡単かもしれないパラメータを設定する方法に比較して、あなたが最終的にlocal-name() = $element_typesを使用することができますによっては。

+0

ありがとうございます! – senleft

関連する問題