2016-12-06 17 views
0

私はxsltが新しく、xsltを使用してxml以下に変換しようとしています。私は以下のxsltを使用して2つのフィールドを変更しようとしています(1つは数字で、もう1つは文字列タイプです)。xsltの文字列を置き換える方法

<items> 
<item> 
    <item_id>27989498</item_id> 
    <service>Test Fee1</service> 
    <rate>350</rate> 
    <quantity>1</quantity> 
    <tax_rate>0</tax_rate> 
    <item_date>2010-11-17-05:00</item_date> 
</item> 
</items> 

XSLT:

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

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

<xsl:template match="rate[ . &gt; 0 ]"> 
    <xsl:copy>100</xsl:copy> 
</xsl:template> 

<xsl:template match="service[ . &eq; 'Test Fee1' ]"> 
    <xsl:copy>T1</xsl:copy> 
</xsl:template> 

出力:

<items> 
<item> 
<item_id>27989498</item_id> 
<service>Test Fee1</service> 
<rate>100</rate> 
<quantity>1</quantity> 
<tax_rate>0</tax_rate> 
<item_date>2010-11-17-05:00</item_date> 
</item> 
</items> 

XSLTの上、正しくレートフィールドを置き換えているが、文字列フィールド "サービス" のためにそれが意図した値を交換していません。 "eq"メソッドが動作していないので、xsltの文字列を比較して置き換える方法はありますか?

ハードコードの代わりに値のリストから置換値を選択することはできますか?テスト料金1等= T1、テスト料金2 = T2、テスト料金3 = T3

更新:例

要求XMLサービスタグには、一連の値を持たない代わりに、ランダムな値となり国の州名のようないくつかのキーに置き換える必要がある場合は、大文字と小文字の区別を考慮しないで州のコードに置き換える必要があります。

例:ニューヨーク= NYやニューヨーク= NY、アリゾナ州= ARなど

+0

答えがそれ以上対応しないように質問を変更しました。あなたの質問を上書きするのではなく、それを元に戻して_extend_してください。 –

+0

私は変更を加えて質問を更新しました。メソッドを提案して、大文字と小文字を区別しないで比較し、リストから値を取得することもできますか? – springbatcher

+0

@springbatcherここで与えられた答えを受け入れて、新しい問題の新しい質問を投稿する方が良いでしょう。いずれにしても、XSLT 1.0またはXSLT 2.0を使用しているかどうかを知る必要があります。 XSLTについて質問するときには、 'xslt'に加えてこれらのタグの一つを選ぶことを習慣にしてください。 –

答えて

1

XSLT 1.0(またはそれ以降)と仮定すると、あなたは、単にmatch="service[. = 'Test Fee1' ]"を使用してプロセッサ。 XSLT 2.0プロセッサでは、match="service[. eq 'Test Fee1' ]"も使用できます。 match="rate[ . &gt; 0 ]"match="rate[ . > 0 ]"に簡略化できます。 XSLT 1.0で

1

A非常に単純なアプローチは:

<xsl:template match="service[starts-with(., 'Test Fee') 
     and number(substring-after(., 'Test Fee')) &gt; 0]"> 
    <service> 
     <xsl:text>T</xsl:text> 
     <xsl:value-of select="substring-after(., 'Test Fee')"/> 
    </service> 
</xsl:template> 

これは>あなたが実際<サービスを可能にする値に応じて、要件に応じて、さらに洗練された可能性があります。

関連する問題