2017-07-20 17 views
0

私は、メンバーのいくつかのアドレスをアドレスタイプPRIMARY、MAILINGなどとして取得するXML文書を持っていますが、memberIdが '0'の場合は、PRIMARY、MAILINGというアドレスを読み取るだけです。下記のサンプルXMLをご覧ください。XSLを使用して条件ロジックを適用する

<xsl:template match="core"> 
    <xsl:when test="memberId[.='0'] and address/type[.='PRIMARY']"> 
    <fo:table-row> 
     <fo:table-cell xsl:use-attribute-sets="data"> 
      <fo:block>Line 1</fo:block> 
     </fo:table-cell>    
    </fo:table-row> 

しかし、この条件のチェックが機能していないとアドレスが生成されたドキュメントにレンダリングされていません -

 <core> 
    <address> 
     <postalZipCode>90017</postalZipCode> 
     <updateSource>xxxxxx</updateSource> 
     <city>LOS ANGELES</city> 
     <stateProvince>CA</stateProvince> 
     <type>MAILING</type> 
     <line1>818 WEST SEVENTH STREET</line1> 
    </address> 
    <address> 
     <postalZipCode>95014</postalZipCode> 
     <updateSource>xxxxxx</updateSource> 
     <city>CUPERTINO</city> 
     <stateProvince>CA</stateProvince> 
     <type>PRIMARY</type> 
     <line1>1234 XYZ STREET</line1> 
    </address> 
     <memberId>0</memberId> 
    </core> 

私は私のXSLTファイルで評価しようとしていますXSL条件は以下の通りです。 ここでエキスパートがそのような条件付きチェックを行うにはどうすればよいですか?

+0

"memberIdが '0'の場合、PRIMARY、MAILINGというアドレスを読みたいだけです。*"これは明確な説明ではありません。 ** PRIMARYやMAILING(そして他の 'member Id'の値も好む)以外のアドレス**を持つサンプルを使用して、それを変換すると予想される結果を示してみませんか? –

答えて

1

まず、<xsl:choose>以外の子として<xsl:when>を指定することはできません。この場合、おそらく<xsl:if>を使用することになっていると思われます。

第2に、テンプレートはcoreで、プライマリではありませんaddress要素 - これが意図的であるかどうかはわかりません。

第3に、ここに含まれていないものがない限り、テンプレートは実際にはソースドキュメントから何も出力しません。

通常、テンプレート内の明示的な条件付き論理ではなく、条件に合致する条件付きのテンプレートを書くことをお勧めします。

<xsl:template match="core[memberId='0']/address[type='PRIMARY']"> 
    <fo:etc.. 
</xsl:template> 
+1

"*あなたの条件に合った述語でテンプレートを書くのが一般的です*"私はそのような規則に同意するのか分からない。テンプレート**を選択的に適用することが一般的にはお勧めです。そうしないと、条件に合致しないノードが組み込みのテンプレートルールによって処理され、予期しない(および不要な)結果が発生します。 –

+0

ありがとうFlynn。私はちょうどから

+0

@ michael.hor257kに変更しなければなりませんでした。私はおそらくそれが好みと状況の問題である程度まで同意しなければならないと思うでしょう。さまざまな条件がある場合は、大規模なテンプレートをすばやく作成して維持管理することが難しくなります。個人的には、他の条件に一致する空のテンプレートを常に含めることになります。スタイルシートが明示的に他の場合の出力を定義しない場合は、意図が明確になります。 – Flynn1179

関連する問題