2012-03-03 47 views
1

任何人都可以帮助我吗?如何在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索引位置组项目行。

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

<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传输输入数据?

在此先感谢。

回答

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: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> 
+0

非常感谢。 :) – 2012-03-05 09:59:55

+0

@Dekkaria:不客气。 – 2012-03-05 13:38:37

相关问题