2011-11-10 2 views
0

ソースのXML:ため、それぞれ使用してXSL:for-eachまたはtemplatesはこのソースXMLをより良く解決しますか?

<A> 
    <B> 
     <Yes>Y</Yes> 
     <Address> 
      <Type>Present</Type> 
      <DoorNo>354</DoorNo> 
      <Line>ABCD</Line> 
     </Address> 
     <Address> 
      <Type>Permanent</Type> 
      <DoorNo>354</DoorNo> 
      <Line>ABCD</Line> 
     </Address> 
    </B> 
    <B> 
     <Yes>N</Yes> 
     <Address> 
      <Type>Present</Type> 
      <DoorNo>354</DoorNo> 
      <Line>ABCD</Line> 
     </Address> 
     <Address> 
      <Type>Permanent</Type> 
      <DoorNo>354</DoorNo> 
      <Line>ABCD</Line> 
     </Address> 
    </B> 
    <D> 
     <Address> 
      <Type>Office</Type> 
      <DoorNo>354</DoorNo> 
      <Line>ABCD</Line> 
     </Address> 
    </D> 
</A> 

マイコード:

<Address> 
<xsl:for-each select="A/B[Yes = 'Y']"> 
    <xsl:for-each select="Address"> 
     <xsl:if test="DoorNo = ../../D/Address/DoorNo"> 
      <xsl:value-of select="Line"/> 
     </xsl:if> 
    </xsl:for-each> 
</xsl:for-each> 
</Address> 

出力は次のようになります。私の場合は、条件、A/BのDoorNoと同様に

<Address> 
    ABCD 
</Address> 

/AddressはA/D/AddressのDoorNoと等しく、タグ値はA/Bの 'Y'でなければならず、出力は次のようになります。

現在のアドレスと恒久的なアドレスが同じ場合、アドレスの1つのみを出力に表示する必要があります。 else IF条件が満たされていなければなりません。

2日からfor-eachをCount変数で再帰的テンプレートに置き換えようとしていますが、1つのADDRESSを取得できません。

私は次のように再帰的テンプレートでこれを試しています。 同じDoorNo値を持つアドレスが '1'より大きい場合Count < = 1が機能し、First Addressの行のみを表示する必要があります。複数のアドレス値は避けなければなりません。

これを解決しようとしている人にお越しいただき、ありがとうございました 解決してくれてありがとうございました。

+0

誤って書式設定したため、後者のコードサンプルが表示されません。 –

+0

希望の出力を見せてくれました。実際の出力は何ですか? '

ABCDABCD
'? – LarsH

答えて

1

あなたがしようとしていることを確認するのは難しいです。これは、あなたの望むことですか? [Yes = 'Y']各B要素のこの意志出力1つのアドレスライン:

<Address> 
<xsl:for-each select="A/B[Yes = 'Y']"> 
    <xsl:for-each select="Address[DoorNo = ../../D/Address/DoorNo][1]"> 
     <xsl:value-of select="Line"/> 
    </xsl:for-each> 
</xsl:for-each> 
</Address> 
1

あなたの質問のタイトルはあなたが記述問題とは無関係のようです。

XSLTテンプレートルールを使用する利点は、特定のソースドキュメントをよりうまく処理することができないことに起因します。これは、異なるソースドキュメント間で結果のコードを再利用することによってもたらされますより少ない程度である。あなたのタイトルの質問は間違った質問です。スタイルシートの一般化と再利用にどれくらいの労力を費やすかを知るためには、入力の具体的な入力例だけでなく、現在または将来に処理する必要のあるドキュメントの種類について知る必要があります。

関連する問題