1

このようなXMLファイルを使用できます。

    <root>
      <ignore>
        <child>1</child>
      </ignore>
      <select.val>
        <child>2</child>
      </select.val>
    </root>

シナリオ1:

<select.val>の下の子ノードの値を取得したい。

この/root/select.val/childのようなxp​​athでそれらを取得できます。問題は、<select.val>が別のxmlファイルでは異なる可能性があることです。別のxmlでは< select.val2>である可能性があります。ワイルドカード(/ root / * / child )を使用すると、 <ignore>の下の値も取得されます。

基本的にこの/root/select.*/childのようなもの

シナリオ2:

変数/パラメーターからvalを設定するxsltを使用してxmlファイルを生成するにはどうすればよいですか?たとえば、変数/パラメータの値がval3の場合、次のようなノードが生成されます<select.val3>

基本的にはこんな感じ。 <select。<value-ofselect= "$ val">>

PS:これは可能ですか、それともノードの属性として使用する必要がありますか?

4

1 に答える 1

2

これを行う1つの方法は、xpathの部分文字列関数を使用して、要素の名前が条件に一致することを確認することです。

<xsl:apply-templates select="root/*
   [substring(local-name(), 1, 7) = 'select.']/child" />

これは、名前がselectで始まる要素の子である要素のみを選択します。

次に、これをパラメーター化して、終止符の後に発生する要素の名前を確認するのは簡単です。

<xsl:apply-templates select="root/*
   [substring(local-name(), 1, 7) = 'select.']
   [substring-after(local-name(), '.') = $val]/child" />

(ここで、$ valは、照合する名前を含むパラメーターです)。

たとえば、次のXSLTを使用します

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:param name="val" select="'val'" />

    <xsl:template match="/">
        <xsl:apply-templates select="root/*[substring(local-name(), 1, 7) = 'select.'][substring-after(local-name(), '.') = $val]/child" />
    </xsl:template>

    <xsl:template match="child">
        <xsl:copy-of select="." />
    </xsl:template>
</xsl:stylesheet>

サンプルXMLに適用すると、次のように出力されます。

<child>2</child>

名前のパラメーターを使用して新しいノードを生成する場合は、属性値テンプレート(中括弧を使用して指定)でxsl:elementオプションを使用して、名前を設定します。

<xsl:element name="select.{$val}">3</xsl:element>

たとえば、$valを'val3'に設定すると、次のように出力されます。

<select.val3>3</select.val3>
于 2012-06-06T06:31:56.960 に答える