2012-03-01 4 views
2

ここでは入力したxmlは<SRNumber>1</SRNumber>を削除しますが、childServiceRequest_LXKCTrackCodesをマージします。要素値に基づいて重複したペアレントを削除しようとするXSLTの新機能です。しかし、子をマージしたい

<ServiceRequest> <SRNumber>1</SRNumber> 
<ServiceRequest_LXKCTrackCodes> 
<Note>Test1</Note> 
</ServiceRequest_LXKCTrackCodes> 
</ServiceRequest> 
<ServiceRequest> 
<SRNumber>1</SRNumber> <ServiceRequest_LXKCTrackCodes> <Note>Test2</Note> </ServiceRequest_LXKCTrackCodes> </ServiceRequest> <ServiceRequest> <SRNumber>2</SRNumber> <ServiceRequest_LXKCTrackCodes> <Note>Test3</Note> </ServiceRequest_LXKCTrackCodes> </ServiceRequest> 

.... 所望の出力:

<ServiceRequest> 
<SRNumber>1</SRNumber> 
<ServiceRequest_LXKCTrackCodes> 
<Note>Test1</Note> 
</ServiceRequest_LXKCTrackCodes> 
<ServiceRequest_LXKCTrackCodes> 
<Note>Test2</Note> 
</ServiceRequest_LXKCTrackCodes> 
<ServiceRequest> 
<SRNumber>2</SRNumber> 
<ServiceRequest_LXKCTrackCodes> 
<Note>Test3</Note> 
</ServiceRequest_LXKCTrackCodes> 
</ServiceRequest> 

------------------------------------------------------------------------ 

答えて

1

この変換:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:key name="kSRByNum" match="ServiceRequest" use="SRNumber"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match= 
"ServiceRequest 
    [generate-id() 
    = 
    generate-id(key('kSRByNum', SRNumber)[1]) 
    ] 
"> 
    <xsl:copy> 
    <xsl:apply-templates select="SRNumber"/> 
    <xsl:apply-templates select= 
    "key('kSRByNum', SRNumber)/ServiceRequest_LXKCTrackCodes"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="ServiceRequest"/> 
</xsl:stylesheet> 
日入力XMLのために、この上で私の頭を壊し、任意の助けに感謝

提供されたXMLに適用された場合(afterそれが十分に形成させるための補正):

<t> 
    <ServiceRequest> 
     <SRNumber>1</SRNumber> 
     <ServiceRequest_LXKCTrackCodes> 
     <Note>Test1</Note> 
     </ServiceRequest_LXKCTrackCodes> 
     <ServiceRequest_LXKCTrackCodes> 
     <Note>Test2</Note> 
     </ServiceRequest_LXKCTrackCodes> 
    </ServiceRequest> 
    <ServiceRequest> 
     <SRNumber>2</SRNumber> 
     <ServiceRequest_LXKCTrackCodes> 
     <Note>Test3</Note> 
     </ServiceRequest_LXKCTrackCodes> 
    </ServiceRequest> 
</t> 

説明:適切Muenchian groupingの使用およびテンプレートマッチング

<t> 
    <ServiceRequest> 
     <SRNumber>1</SRNumber> 
     <ServiceRequest_LXKCTrackCodes> 
      <Note>Test1</Note> 
     </ServiceRequest_LXKCTrackCodes> 
    </ServiceRequest> 
    <ServiceRequest> 
     <SRNumber>1</SRNumber> 
     <ServiceRequest_LXKCTrackCodes> 
      <Note>Test2</Note> 
     </ServiceRequest_LXKCTrackCodes> 
    </ServiceRequest> 
    <ServiceRequest> 
     <SRNumber>2</SRNumber> 
     <ServiceRequest_LXKCTrackCodes> 
      <Note>Test3</Note> 
     </ServiceRequest_LXKCTrackCodes> 
    </ServiceRequest> 
</t> 

募集、正しい結果を生成します。

+0

これは完璧だったので、ちょうど私の一日を作ってくれてありがとう。 – user1239213

+0

@ user1239213:それが完璧だったら、*答えを受け入れるのはどうですか?これは、答えの横にあるチェックマークをクリックすることによって行われます。 –

関連する問題