如何在 xsl 中查找组行项目的索引位置 [英] How to find index position for group line item in xsl

查看:30
本文介绍了如何在 xsl 中查找组行项目的索引位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以帮我吗?

输入 XML:

<dataXML>
<Items>
    <itemLine>
        <lineNo>1</lineNo>
        <lineRefNo>001</lineRefNo>
        <lineDes>test1</lineDes>
    </itemLine>
    <itemLine>
        <lineNo>6</lineNo>
        <lineRefNo>003</lineRefNo>
        <lineDes>test6</lineDes>
    </itemLine>
    <itemLine>
        <lineNo>4</lineNo>
        <lineRefNo>002</lineRefNo>
        <lineDes>test4</lineDes>
    </itemLine>
    <itemLine>    
        <lineNo>3</lineNo>
        <lineRefNo>002</lineRefNo>
        <lineDes>test3</lineDes>
    </itemLine>   
    <itemLine>
            <lineNo>7</lineNo>
            <lineRefNo>003</lineRefNo>
            <lineDes>test7</lineDes>    
        </itemLine>         
    <itemLine>
        <lineNo>5</lineNo>
        <lineRefNo>002</lineRefNo>
        <lineDes>test5</lineDes>
    </itemLine>    
    <itemLine>
        <lineNo>2</lineNo>
        <lineRefNo>001</lineRefNo>
        <lineDes>test2</lineDes>
    </itemLine>
</Items>
</dataXML>

需要根据索引位置的 LineRefNo 对项目行进行分组.

Need to group item lines based on LineRefNo for index position.

预期结果:自然顺序必须相同.

<dataXML>
    <Items>
        <itemLine>
            <lineNo>1</lineNo>
            <lineRefNo>001</lineRefNo>
            <lineDes>test1</lineDes>
            <RefNoIndex>1</RefNoIndex>
        </itemLine>
        <itemLine>
            <lineNo>6</lineNo>
            <lineRefNo>003</lineRefNo>
            <lineDes>test6</lineDes>
            <RefNoIndex>1</RefNoIndex>
        </itemLine>
        <itemLine>
            <lineNo>4</lineNo>
            <lineRefNo>002</lineRefNo>
            <lineDes>test4</lineDes>
            <RefNoIndex>1</RefNoIndex>
        </itemLine>
        <itemLine>    
            <lineNo>3</lineNo>
            <lineRefNo>002</lineRefNo>
            <lineDes>test3</lineDes>
            <RefNoIndex>2</RefNoIndex>
        </itemLine> 
        <itemLine>
            <lineNo>7</lineNo>
            <lineRefNo>003</lineRefNo>
            <lineDes>test7</lineDes>
            <RefNoIndex>2</RefNoIndex>
        </itemLine>         
        <itemLine>
            <lineNo>5</lineNo>
            <lineRefNo>002</lineRefNo>
            <lineDes>test5</lineDes>
            <RefNoIndex>3</RefNoIndex>
        </itemLine>    
        <itemLine>
            <lineNo>2</lineNo>
            <lineRefNo>001</lineRefNo>
            <lineDes>test2</lineDes>
            <RefNoIndex>2</RefNoIndex>
        </itemLine>
    </Items>
    </dataXML>

如何使用 xsl 1.0 版传输输入数据?

How to transfer input data using xsl version 1.0?

提前致谢.

推荐答案

这种转变:

<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:template match="node()|@*" name="identity">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="itemLine/*[last()]">
  <xsl:call-template name="identity"/>

  <RefNoIndex>
   <xsl:copy-of select=
   "count(preceding::lineRefNo[. = current()/../lineRefNo])"/>
  </RefNoIndex>
 </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<dataXML>
    <Items>
        <itemLine>
            <lineNo>1</lineNo>
            <lineRefNo>001</lineRefNo>
            <lineDes>test1</lineDes>
        </itemLine>
        <itemLine>
            <lineNo>6</lineNo>
            <lineRefNo>003</lineRefNo>
            <lineDes>test6</lineDes>
        </itemLine>
        <itemLine>
            <lineNo>4</lineNo>
            <lineRefNo>002</lineRefNo>
            <lineDes>test4</lineDes>
        </itemLine>
        <itemLine>
            <lineNo>3</lineNo>
            <lineRefNo>002</lineRefNo>
            <lineDes>test3</lineDes>
        </itemLine>
        <itemLine>
            <lineNo>7</lineNo>
            <lineRefNo>003</lineRefNo>
            <lineDes>test7</lineDes>
        </itemLine>
        <itemLine>
            <lineNo>5</lineNo>
            <lineRefNo>002</lineRefNo>
            <lineDes>test5</lineDes>
        </itemLine>
        <itemLine>
            <lineNo>2</lineNo>
            <lineRefNo>001</lineRefNo>
            <lineDes>test2</lineDes>
        </itemLine>
    </Items>
</dataXML>

产生想要的、正确的结果:

<dataXML>
   <Items>
      <itemLine>
         <lineNo>1</lineNo>
         <lineRefNo>001</lineRefNo>
         <lineDes>test1</lineDes>
         <RefNoIndex>1</RefNoIndex>
      </itemLine>
      <itemLine>
         <lineNo>6</lineNo>
         <lineRefNo>003</lineRefNo>
         <lineDes>test6</lineDes>
         <RefNoIndex>1</RefNoIndex>
      </itemLine>
      <itemLine>
         <lineNo>4</lineNo>
         <lineRefNo>002</lineRefNo>
         <lineDes>test4</lineDes>
         <RefNoIndex>1</RefNoIndex>
      </itemLine>
      <itemLine>
         <lineNo>3</lineNo>
         <lineRefNo>002</lineRefNo>
         <lineDes>test3</lineDes>
         <RefNoIndex>2</RefNoIndex>
      </itemLine>
      <itemLine>
         <lineNo>7</lineNo>
         <lineRefNo>003</lineRefNo>
         <lineDes>test7</lineDes>
         <RefNoIndex>2</RefNoIndex>
      </itemLine>
      <itemLine>
         <lineNo>5</lineNo>
         <lineRefNo>002</lineRefNo>
         <lineDes>test5</lineDes>
         <RefNoIndex>3</RefNoIndex>
      </itemLine>
      <itemLine>
         <lineNo>2</lineNo>
         <lineRefNo>001</lineRefNo>
         <lineDes>test2</lineDes>
         <RefNoIndex>2</RefNoIndex>
      </itemLine>
   </Items>
</dataXML>

这篇关于如何在 xsl 中查找组行项目的索引位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆