Преобразование XSL 1.0 для объединения узлов - PullRequest
1 голос
/ 22 июня 2010

Возможно ли выполнить преобразование ниже, используя XSL 1.0.Если да, пожалуйста, отправьте пример кода, который поможет мне начать работу в правильном направлении.

<Region> 
<RecType1><Amt> 100 </Amt></RecType1><RecType2><Name>XXX</Name></RecType2><RecType1><Amt> 200 </Amt></RecType1><RecType2><Name>YYY</Name></RecType2><RecType1><Amt> 300 </Amt></RecType1><RecType2><Name>ZZZ</Name></RecType2></Region>

TO

<Region> 
<Payment><Amt>100</Amt><Name>XXX</Name></Payment><Payment><Amt>200</Amt><Name>YYY</Name></Payment><Payment><Amt>300</Amt><Name>ZZZ</Name></Payment></Region>

1 Ответ

0 голосов
/ 22 июня 2010

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

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

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

 <xsl:template match="RecType1">
   <Payment>
    <xsl:apply-templates select="* | following-sibling::RecType2[1]/*"/>
   </Payment>
 </xsl:template>

 <xsl:template match="RecType2"/>
</xsl:stylesheet>

при применении к предоставленному документу XML (с отступом для удобства чтения):

<Region>
    <RecType1>
        <Amt> 100 </Amt>
    </RecType1>
    <RecType2>
        <Name>XXX</Name>
    </RecType2>
    <RecType1>
        <Amt> 200 </Amt>
    </RecType1>
    <RecType2>
        <Name>YYY</Name>
    </RecType2>
    <RecType1>
        <Amt> 300 </Amt>
    </RecType1>
    <RecType2>
        <Name>ZZZ</Name>
    </RecType2>
</Region>

дает желаемый результат (также с отступом для удобства чтения):

<Region>
    <Payment>
        <Amt> 100 </Amt>
        <Name>XXX</Name>
    </Payment>
    <Payment>
        <Amt> 200 </Amt>
        <Name>YYY</Name>
    </Payment>
    <Payment>
        <Amt> 300 </Amt>
        <Name>ZZZ</Name>
    </Payment>
</Region>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...