Новичок в XSLT, пытающийся устранить дублирующих родителей на основе элемента value.but хотел бы объединить детей - PullRequest
2 голосов
/ 01 марта 2012

Вот мой входной XML, хотел бы исключить <SRNumber>1</SRNumber>, но объединить childServiceRequest_LXKCTrackCodes.Цени любую помощь, ломая мне голову на это в течение дня

1 Ответ

1 голос
/ 01 марта 2012

Это преобразование:

<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 (после исправлений, чтобы сделать его корректным):

<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>

даст желаемый, правильный результат :

<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>

Пояснение : правильное использование мюнхенская группировка и сопоставление с шаблоном.

...