2013-05-10 29 views
0

我有问题。我想要的是总结对象并为每次迭代打印它们。我对XSLT很陌生,所以请客气。我所拥有的是这样的代码:XML/XSLT总和为 - 每个变量

<?xml version = "1.0" encoding = "Windows-1252"?> 
<GPDUMP> 
    <ROUTE> 
    <ALL_ROUTEANDORDER> 
     <NUMBER>3</NUMBER> 
     <NO0> 
     <ROUTEANDORDER> 
      <FKCUSTOMERID>2</FKCUSTOMERID> 
      <SEQUENCENO>1</SEQUENCENO> 
      <STOPNO>1</STOPNO> 
      <SPLITKMDRIVING>13076</SPLITKMDRIVING> 
     </ROUTEANDORDER> 
     </NO0> 
     <NO1> 
     <ROUTEANDORDER> 
      <FKCUSTOMERID>4</FKCUSTOMERID> 
      <SEQUENCENO>2</SEQUENCENO> 
      <STOPNO>2</STOPNO> 
      <SPLITKMDRIVING>6204</SPLITKMDRIVING> 
     </ROUTEANDORDER> 
     </NO1> 
     <NO2> 
     <ROUTEANDORDER> 
      <FKCUSTOMERID>3</FKCUSTOMERID> 
      <SEQUENCENO>3</SEQUENCENO> 
      <STOPNO>3</STOPNO> 
      <SPLITKMDRIVING>4775</SPLITKMDRIVING> 
     </ROUTEANDORDER> 
     </NO2> 
    </ALL_ROUTEANDORDER> 
    </ROUTE> 
</GPDUMP> 

我想作为输出是这样的:

<CUSTOMERID>2</CUSTOMERID> 
<DIST_FROM_PREVIOUS>13076</DIST_FROM_PREVIOUS> 
<DIST_FROM_START>13076</DIST_FROM_START> 

<CUSTOMERID>4</CUSTOMERID> 
<DIST_FROM_PREVIOUS>6204</DIST_FROM_PREVIOUS> 
<DIST_FROM_START>13076 + 6204</DIST_FROM_START> 

<CUSTOMERID>3</CUSTOMERID> 
<DIST_FROM_PREVIOUS>4775</DIST_FROM_PREVIOUS> 
<DIST_FROM_START>13076 + 6204 + 4775</DIST_FROM_START> 

正如你所看到的,DIST_FROM_START应概括为如下过程。

我有这样的:

<xsl:for-each select="ALL_ROUTEANDORDER[1]/*[$index]" > 
    <xsl:variable name="kmFromStart" select="sum(ALL_ROUTEANDORDER/*[starts-with(name(),'NO')]/ROUTEANDORDER/SPLITKMDRIVING)"/> 
    <xsl:variable name="kmFromPrevious" select="ALL_ROUTEANDORDER/*[starts-with(name(),'NO')]/ROUTEANDORDER/SPLITKMDRIVING"/> 
    <xsl:text>From start</xsl:text><xsl:value-of select="$kmFromStart" /> 
    <xsl:text>From previous </xsl:text><xsl:value-of select="$kmFromPrevious" /> 
</xsl:for-each> 

希望有人得到我的想法,并能帮帮我!我搜索了几页,并尝试参数没有运气。我非常渴望得到这个工作!任何帮助都是好的!感谢:)

+0

你说你想要的输出没有根节点,所以是无效的XML。此外,你是否真的希望三位顾客和他们的细节都在同一水平?更常见的是有一个''节点,它具有一个'id'属性和两个包含信息的子元素。你是否也希望添加这样的字面呢?还是你想在插入之前计算它们? – Borodin 2013-05-10 19:45:23

+0

另外,在整个数据中是否只有* 1 *'/ GPDUMP/ROUTE/ALL_ROUTEANDORDER'元素,还是你想为几个元素做这件事? – Borodin 2013-05-10 19:50:03

回答

2

在没有任何指导您的具体要求,我已经写了这个。我希望它有帮助。

​​

输出

<?xml version="1.0" encoding="utf-8"?> 
<root> 

    <CUSTOMERID>2</CUSTOMERID> 
    <DIST_FROM_PREVIOUS>13076</DIST_FROM_PREVIOUS> 
    <DIST_FROM_START>13076</DIST_FROM_START> 

    <CUSTOMERID>4</CUSTOMERID> 
    <DIST_FROM_PREVIOUS>6204</DIST_FROM_PREVIOUS> 
    <DIST_FROM_START>19280</DIST_FROM_START> 

    <CUSTOMERID>3</CUSTOMERID> 
    <DIST_FROM_PREVIOUS>4775</DIST_FROM_PREVIOUS> 
    <DIST_FROM_START>24055</DIST_FROM_START> 

</root>