2016-07-01 10 views
1

XSLT 1.0を使用して空のXMLタグにデフォルトのテキストまたは数値を書き込む必要があります。ここでStackOverflowで検索すると、これでDimitreのソリューション私は必要なものpostXSLT 1.0の各空のXMLタグのデフォルト値を設定する

は、私は以下のようなタグを持って、たとえば次のとおりです。

<Number></Number> <!--Which is empty--> 

または

<Text></Text> <!--Which is also empty--> 

私は必要なものの各EMPのデフォルト値を置くことです私のXMLのtyタグは<Number>0.00</Number>の数値タグ、<Text>nil</Text>の英数字タグのように、私は非常に大きなXMLを持っていますので、それは常に自分の入力から読み取られ、次にデフォルトに挿入するIDテンプレートのようなものです空の文字列で、または私は各フィールド/タグの下のようなコードを行うことができますか?

<xsl:copy-of select="concat(categoryName,$vOther[not(string(current()/categoryName))])"/> 

ありがとうございます。

答えて

1

この変換

<t> 
    <Number>10</Number> 
    <Number/> 
    <Text>Hello</Text> 
    <Text/> 
</t> 

が望む正しい結果を生成する:(何も提供されなかったように)このXML文書に塗布

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Number[not(node())]"> 
    <Number>0.00</Number> 
    </xsl:template> 

    <xsl:template match="Text[not(node())]"> 
    <Text>nill</Text> 
    </xsl:template> 
</xsl:stylesheet> 

<t> <Number>10</Number> <Number>0.00</Number> <Text>Hello</Text> <Text>nill</Text> </t> 

このような基本的な問題を解決するための体系的な知識を得るために、私は(臆面もなく)このPluralsightトレーニングコースを見てお勧めします。

XSLT 2.0 and 1.0 Foundations

+0

こんにちは@Dimitreそれが空であるかどうかをチェックし、その文字列をデフォルト値に置き換えるには、XSLTの各要素のテンプレートを作成しなければならないということですか?また、 zyberjock

+0

@zyberjock、あなたは同じデフォルト値を持つ要素名の各セットのテンプレートが必要になります。他のプログラミング言語と同様に、具体的にはそれを処理する特定のコードが必要です。あなたが今すぐ上げる他の要件については、もう一度新しい質問をするかもしれません。あなたの現在の質問は完全に答えられます。 –

+0

@zyberjockもちろん、名前に関係なく、空の要素に一致する単一のテンプレートを書くことができます。しかし、この場合、多くの条件文(または ' ')が必要となり、その結果、より複雑で読みにくいコードになります。 XSLTの精神の中で、多くの短くてシンプルなテンプレート、大量で複雑な、判読不能な、維持が困難なテンプレートを使用することが推奨されています。実際、条件文を使用することは、どの言語でもアンチパターンです。ここに示すように、https://www.pluralsight.com/courses/tactical-design-patterns-dot-net-control-flow –

関連する問題