python_here Ответов: 0

Я застрял в какой-то точке разлитого XSLT-файла.


Мой xml-это:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<nums>
  <num>02</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>06</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>
</nums>

Мой текущий вывод: разбивает xml независимо от значения узла.
<nums>
   <group>
      <num>02</num>
      <num>02</num>
      <num>03</num>
   </group>
   <group>
      <num>04</num>
      <num>05</num>
      <num>06</num>
   </group>
   <group>
      <num>07</num>
      <num>08</num>
      <num>09</num>
   </group>
   <group>
      <num>10</num>
   </group>
</nums>

Мой ожидаемый выходной XML: сначала проверяет, есть ли какие-либо совпадающие узлы с последним узлом, если да, то включите их, иначе исключите.
<nums>
   <group>
      <num>02</num>
      <num>02</num>
      <num>03</num>
   </group>
   <group>
      <num>04</num>
      <num>05</num>
      <num>06</num>
      <num>06</num>
   </group>
   <group>
      <num>08</num>
      <num>09</num>
      <num>10</num>
   </group>
</nums>


Что я уже пробовал:

Мой текущий XSLT-это:
<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:param name="pGroupSize" select="3"/>

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

 <xsl:template match="/*">
  <nums>
   <xsl:apply-templates select=
       "num[position() mod $pGroupSize = 1]"/>
  </nums>
 </xsl:template>

 <xsl:template match="num">
  <group>
   <xsl:copy-of select=
    ".|following-sibling::*
              [not(position() > $pGroupSize -1)]"/>
  </group>
 </xsl:template>
</xsl:stylesheet>

0 Ответов