XSLファイルで変換しようとしている以下のXML部分があります。別の属性のワイルドカードの一致に基づく属性の更新
XMLファイルのサンプル:
<data>
<KEY name="B1F" value="Smith" />
<KEY name="B1L" value="Johnson" />
<KEY name="B2F" value="Nancy" />
<KEY name="B2L" value="Drew" />
<KEY name="B1Phone" value="123-456-7890" />
<KEY name="B1SSN" value="123-45-6789" />
<KEY name="B1Address" value="1234 Highway 102" />
<KEY name="B2Phone" value="123-456-7890" />
<KEY name="B2SSN" value="123-45-6789" />
<KEY name="B2Address" value="1234 Highway 102" />
<KEY name="B7SSN" value="987-65-4321" />
<KEY name="B8F" value="George" />
<KEY name="B8L" value="Lucas" />
</data>
現在のXSLの抜粋:
<xsl:variable name="ReplaceLiveDate" select="false()"/>
<xsl:variable name="BDOB" select="1990-01-01"/>
<xsl:variable name="BF">Test Borrower</xsl:variable>
<xsl:variable name="BL">Last Name</xsl:variable>
<xsl:variable name="BPhone" select="5551234567" />
<xsl:variable name="BSSN" select="555112345" />
<xsl:variable name="Address">Test Address</xsl:variable>
<!-- in DATA: output KEY sorted by @name -->
<xsl:template match="DATA">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates select="KEY">
<xsl:sort select="@name" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<!-- output KEY verbatim -->
<xsl:template match="KEY">
<xsl:copy-of select="." />
</xsl:template>
<!-- Start of the conversion for Live Data to Test
need to repeat or wildcard for each instance
<xsl:template match="KEY[@name='B1L']">
<xsl:copy>
<xsl:when test="$ReplaceLiveDate = false()">
<xsl:apply-templates select="node()|@*"/>
</xsl:when>
<xsl:otherwise>
<KEY value="$BL">
<xsl:apply-templates select="@*[not(name()='value')] | node()"/>
</KEY>
</xsl:otherwise>
</xsl:copy>
</xsl:template>-->
-
私のようなワイルドカードで、 "名前" の属性値をテストできるようにしたいと思い
」最大8つのインスタンスが存在する可能性があるため、「B?L」または「B [1-8] L」と表示されますが、選択したステートメントにRegExを適用する方法が不明です。
@value
属性の値をXSLの上部で宣言された変数の値で更新したいとします(現在はすべての変数が設定されていますが、テンプレートは "B1L"置換値のためにのみリストされています)。
コードの非コメント部分は問題なく動作しますが、コメント部分は必要に応じて機能しません。
期待される結果:
<data>
<KEY name="B1F" value="Test Borrower" />
<KEY name="B1L" value="Last Name" />
<KEY name="B2F" value="Test Borrower" />
<KEY name="B2L" value="Last Name" />
<KEY name="B1Phone" value="5551234567" />
<KEY name="B1SSN" value="555112345" />
<KEY name="B1Address" value="Test Address" />
<KEY name="B2Phone" value="5551234567" />
<KEY name="B2SSN" value="555112345" />
<KEY name="B2Address" value="Test Address" />
<KEY name="B7SSN" value="555112345" />
<KEY name="B8F" value="Test Borrower" />
<KEY name="B8L" value="Last Name" />
</data>
この問題であなたの助けのために事前にありがとうございます。
あなたはXSLT2.0を使用していますか?あなたのプロセッサがそれを拡張としてサポートしていない限り、XSLT 1.0に正規表現のサポートはありません。 - P.S.テストがどんなものであるべきか、それぞれの場合に期待される結果は何かを明確にしてください。 –
私が使用しているxslのバージョンは1.0ですが、問題なく2.0に変換できます。 期待された結果として、上に追加します – mike
XSLT 2.0プロセッサに切り替えることができることを確認してください。そうしないと、すべての時間に無駄な時間がかかります。 –