2017-04-07 50 views
0

我想我在这里错过了一些简单的东西。我有将数据分成组

<Inventory Division="B" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <StackGroup name="Warehouse"> 
     <Stack> 

      <Mainstack name="PRIMARY"> 
       <MainstackGroup name="GROUP_PRIMARY"> 
        <MainstackLayer sequence="1"> 
         <StackLayerRef id="LAYER_1"/> 
        </MainstackLayer> 
       </MainstackGroup> 
      </Mainstack> 

      <Mainstack name="SECONDARY"> 
       <MainstackGroup name="GROUP_SECONDARY"> 
        <MainstackLayer sequence="2"> 
         <StackLayerRef id="LAYER_2"/> 
        </MainstackLayer> 
       </MainstackGroup> 
      </Mainstack> 

     </Stack> 
    </StackGroup> 
</Inventory> 

我将样式表源XML文件:

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
     <Mainstack> 

      <NumberOfStacks> 
       <xsl:value-of select="count(/Inventory/StackGroup/Stack/Mainstack)"/> 
      </NumberOfStacks> 

      <StackDisplayOrder> 
       <xsl:apply-templates select="/Inventory/StackGroup/Stack/Mainstack" mode="order"/> 
      </StackDisplayOrder> 

      <xsl:apply-templates select="/Inventory/StackGroup/Stack/Mainstack" mode="stacklist"/> 

     </Mainstack> 
    </xsl:template> 

    <xsl:template match="/Inventory/StackGroup/Stack/Mainstack" mode="order"> 
     <Index><xsl:value-of select="position() - 1" /></Index> 
    </xsl:template> 

    <xsl:template match="/Inventory/StackGroup/Stack/Mainstack" mode="stacklist"> 
     <Stack> 
      <Index><xsl:value-of select="position() - 1" /></Index> 
      <Name> 
       <xsl:value-of select="/Inventory/StackGroup/Stack/Mainstack/@name"/> 
      </Name> 
      <GroupName> 
       <xsl:value-of select="/Inventory/StackGroup/Stack/Mainstack/MainstackGroup/@name"/> 
      </GroupName> 
      <SequenceNo> 
       <xsl:value-of select="/Inventory/StackGroup/Stack/Mainstack/MainstackGroup/MainstackLayer/@sequence"/> 
      </SequenceNo> 
      <LayerNo> 
       <xsl:value-of select="/Inventory/StackGroup/Stack/Mainstack/MainstackGroup/MainstackLayer/StackLayerRef/@id"/> 
      </LayerNo> 
     </Stack> 
    </xsl:template> 

</xsl:stylesheet> 

我得到以下输出:

<?xml version="1.0" encoding="UTF-8"?> 
<Mainstack> 
    <NumberOfStacks>2</NumberOfStacks> 
    <StackDisplayOrder> 
     <Index>0</I`enter code here`ndex> 
     <Index>1</Index> 
    </StackDisplayOrder> 
    <Stack> 
     <Index>0</Index> 
     <Name>PRIMARY SECONDARY</Name> 
     <GroupName>GROUP_PRIMARY GROUP_SECONDARY</GroupName> 
     <SequenceNo>1 2</SequenceNo> 
     <LayerNo>LAYER_1 LAYER_2</LayerNo> 
    </Stack> 
    <Stack> 
     <Index>1</Index> 
     <Name>PRIMARY SECONDARY</Name> 
     <GroupName>GROUP_PRIMARY GROUP_SECONDARY</GroupName> 
     <SequenceNo>1 2</SequenceNo> 
     <LayerNo>LAYER_1 LAYER_2</LayerNo> 
    </Stack> 
</Mainstack> 

模板显然认为两场比赛并连接数据来自两者。我怎样才能将它们分开?

在此先感谢!

回答

0

使用相对路径,例如改变

 <Name> 
      <xsl:value-of select="/Inventory/StackGroup/Stack/Mainstack/@name"/> 
     </Name> 

 <Name> 
      <xsl:value-of select="@name"/> 
     </Name> 

等在模板上的所有路径。

+0

Martin, 非常感谢 - 完美运作。现在我必须为了......而开始考虑......! 此致敬礼, 拉尔夫 –