0

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>

以下は私の要件と質問です:

  1. AttributeList タグで、特定の値 ( CcEmailAddress など) を持つ属性「Name」を検索し、対応するフィールド値 (実際の電子メール ID) をターゲット タグにマップする必要があります。//[@Name='CcEmailAddress'] を試してみました 入力に一度現れるので、名前を Name 、値を CcEmailAddress としてすべての属性をトラバースすることにしました。しかし、それは機能していないようです。

  2. コードが特定のオカレンスを選択していることを確認するにはどうすればよいですか? 私の場合 Message details は n-times を繰り返します。for-each 内で選択を使用すると、最初に発生した値のみがフェッチされます。ループが 2 番目の "MessageDetails" にある場合、その中の値を取得したいと思います。どうすればこれを達成できますか?

  3. AttributeList 内に、「Attribute」要素と n-others を保持します。「Content」要素を検索して、属性「Name」=MobileNo の値を見つけたい場合 (MobileNo は任意のタグの下に表示できますが、コンテンツの下で繰り返されるもののみが必要です)、どうすればよいですか?

どうもありがとうございました。

4

1 に答える 1

1
  1. ここでの最良の選択は、コンテキストノードが何であるかに応じて//Attribute[@Name = 'CcEmailAddress']、どちらかまたは相対パスを含むと思います。Attribute[@Name = 'CcEmailAddress']

  2. 相対 XPath を使用できます。コンテキスト ノードが MessageDetails の場合、パスを使用できます。AttributeList/Attribute[@Name = 'CcEmailAddress']

  3. 上記と同様に、要素の値のみを考慮したい場合はContent、 を含むパスを使用できますContent[@Name = 'MobileNo']。繰り返しますが、 を反復処理しているためMessageDetails、これはおそらく次のようになります。AttributeList/Content[@Name = 'MobileNo']

于 2013-03-19T02:16:32.977 に答える