1

私はこのような2つの要素を持っています:

<PhoneNumber>0870 6071352</PhoneNumber>
<FaxNumber>01722 422301</FaxNumber>

出力 (固定幅のテキスト) では、これらの両方が 71 文字の長さになるように先頭にスペースを埋め込む必要があります。

だから私は試しました:

<xsl:value-of select="substring(concat('                                                                       ', msg:ContactDetails/msg:PhoneNumber), string-length(msg:ContactDetails/msg:PhoneNumber) + 1, 71)"/>
<xsl:value-of select="substring(concat('                                                                       ', msg:ContactDetails/msg:FaxNumber), string-length(msg:ContactDetails/msg:FaxNumber) + 1, 71)"/>

しかし、要素が空の場合、上記のstring-length関数は 0 を返すため、出力には 71 個ではなく 59 個のスペースのように見えるものしかありません。

私も試しました:

<xsl:value-of select="substring(concat('                                                                       ', msg:ContactDetails/msg:PhoneNumber), 12, 71)"/>
<xsl:value-of select="substring(concat('                                                                       ', msg:ContactDetails/msg:FaxNumber),  12, 71)"/>

ただし、FaxNumber または Phonenumber 要素が空の場合も同じことが起こります

このような状況を処理するために xsl を変更するにはどうすればよいですか?

4

2 に答える 2

-2

XSLT 用語では、2 つの異なるソース (塗りつぶされた要素と空の要素) があるため、ハードコーディングされた関数で修正する必要はありません。XSLT スタイルで修正する必要があります。

1) テンプレート - これは、バリアントが 2 つだけではなく、多数の異なる制約がある場合に便利です。

a) 使用<xsl:apply-templates select="msg:PhoneNumber | msg:FaxNumber" mode="formatted">

b) 2 つの異なるテンプレート<xsl:template match="msg:PhoneNumber | msg:FaxNumber" mode="formatted" >とそのようなもの<xsl:template match="msg:PhoneNumber[string(.)=''] | msg:FaxNumber[string(.)='']" mode="formatted" >- 2 番目のテンプレートの優先度が高くなります

2) 古くからの友人<xsl:if /><xsl:choose/>- 空虚さが唯一の問題である場合に役立ちます

于 2014-09-04T14:43:10.670 に答える