2012-03-03 30 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

相關問題