XSLT は初めてです。以下のような XML メッセージがあります。
<Root>
<Payload>
<SendEmail>
<customerID>123123</customerID>
<subscriberID>123123</subscriberID>
<MessageDetails>
<AttributeList>
<Attribute Name="CcEmailAddress">abc@abc.com</Attribute>
<Attribute Name="BcccEmailAddress">abc@abc.com</Attribute>
<Attribute Name="SenderEmailAddress">abc@abc.com</Attribute>
<Attribute Name="SenderMobileNo">abc@abc.com</Attribute>
<Content Name="MobileNo">abc@abc.com</Content>
<Content Value="TxnNO">abc@abc.com</Content>
<ERCo ercvalue="ERCNO">abc@abc.com</ERCo>
<Attribute Name="OrderHeader"><![CDATA[" and ends with "]]></Attribute>
</AttributeList>
</MessageDetails>
<MessageDetails>
<AttributeList>
<Attribute Name="CcEmailAddress">abc@abc.com</Attribute>
<Attribute Name="BcccEmailAddress">abc@abc.com</Attribute>
<Attribute Name="SenderEmailAddress">abc@abc.com</Attribute>
<Attribute Name="SenderMobileNo">abc@abc.com</Attribute>
<Content Name="MobileNo">abc@abc.com</Content>
<Content Value="TxnNO">abc@abc.com</Content>
<ERCo ercvalue="ERCNO">abc@abc.com</ERCo>
<Attribute Name="OrderHeader"><![CDATA[" and ends with "]]></Attribute>
</AttributeList>
</MessageDetails>
</SendEmail>
</Payload>
</Root>
以下は私の要件と質問です:
AttributeList タグで、特定の値 ( CcEmailAddress など) を持つ属性「Name」を検索し、対応するフィールド値 (実際の電子メール ID) をターゲット タグにマップする必要があります。//[@Name='CcEmailAddress'] を試してみました 入力に一度現れるので、名前を Name 、値を CcEmailAddress としてすべての属性をトラバースすることにしました。しかし、それは機能していないようです。
コードが特定のオカレンスを選択していることを確認するにはどうすればよいですか? 私の場合 Message details は n-times を繰り返します。for-each 内で選択を使用すると、最初に発生した値のみがフェッチされます。ループが 2 番目の "MessageDetails" にある場合、その中の値を取得したいと思います。どうすればこれを達成できますか?
AttributeList 内に、「Attribute」要素と n-others を保持します。「Content」要素を検索して、属性「Name」=MobileNo の値を見つけたい場合 (MobileNo は任意のタグの下に表示できますが、コンテンツの下で繰り返されるもののみが必要です)、どうすればよいですか?
どうもありがとうございました。