English 中文(简体)
以 xslt 列报告数据
原标题:report data as columns in xslt
  • 时间:2012-05-23 14:49:34
  •  标签:
  • xslt

我试图将一些数据作为栏目而不是行返回,但不确定是否可能这样做?

因此,我遵循 xml :

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

<CashBalanceResult>
  <CashBalanceLine Id="2" Name="Name1" ParentId="1" level="2">
    <Balances>
      <genericDate date="2012-05-21" index="0">10.000000000000</genericDate>
      <genericDate date="2012-05-22" index="1">20.000000000000</genericDate>
      <genericDate date="2012-05-23" index="2">30.000000000000</genericDate>
      <genericDate date="2012-05-24" index="3">40.000000000000</genericDate>
      <genericDate date="2012-05-25" index="4">50.000000000000</genericDate>
    </Balances>
  </CashBalanceLine>
  <CashBalanceLine Id="170" Name="Name2" ParentId="2" level="3">
    <Balances>
      <genericDate date="2012-05-21" index="0">340.000000000000</genericDate>
      <genericDate date="2012-05-22" index="1">440.000000000000</genericDate>
      <genericDate date="2012-05-23" index="2">550.000000000000</genericDate>
      <genericDate date="2012-05-24" index="3">660.000000000000</genericDate>
      <genericDate date="2012-05-25" index="4">770.000000000000</genericDate>
    </Balances>
  </CashBalanceLine>
  <CashBalanceLine Id="179" Name="Name3" ParentId="170" level="4">
    <Balances>
      <genericDate date="2012-05-21" index="0">5.000000000000</genericDate>
      <genericDate date="2012-05-22" index="1">6.000000000000</genericDate>
      <genericDate date="2012-05-23" index="2">6.000000000000</genericDate>
      <genericDate date="2012-05-24" index="3">5.000000000000</genericDate>
      <genericDate date="2012-05-25" index="4">6.000000000000</genericDate>
    </Balances>
  </CashBalanceLine>
</CashBalanceResult>

然后,我试着把通用日期改成5列:

name,2012-05-21,2012-05-22,2012-05-23,2012-05-24,2012-05-25
Name1,10.000000000000,20.000000000000,30.000000000000,40.000000000000,50.000000000000

Name1,10.000000000000,20.000000000000,30.000000000000,40.000000000000,50.000000000000 Name2,340.000000000000,440.000000000000,550.000000000000,660.000000000000,770.000000000000 Name3,5.000000000000,6.000000000000,6.000000000000,5.000000000000,6.000000000000

有可能吗?

问题回答

这是 XSLT 2. 0 选项...

<强度 > XML 输入

<CashBalanceResult>
  <CashBalanceLine Id="2" Name="Name1" ParentId="1" level="2">
    <Balances>
      <genericDate date="2012-05-21" index="0">10.000000000000</genericDate>
      <genericDate date="2012-05-22" index="1">20.000000000000</genericDate>
      <genericDate date="2012-05-23" index="2">30.000000000000</genericDate>
      <genericDate date="2012-05-24" index="3">40.000000000000</genericDate>
      <genericDate date="2012-05-25" index="4">50.000000000000</genericDate>
    </Balances>
  </CashBalanceLine>
  <CashBalanceLine Id="170" Name="Name2" ParentId="2" level="3">
    <Balances>
      <genericDate date="2012-05-21" index="0">340.000000000000</genericDate>
      <genericDate date="2012-05-22" index="1">440.000000000000</genericDate>
      <genericDate date="2012-05-23" index="2">550.000000000000</genericDate>
      <genericDate date="2012-05-24" index="3">660.000000000000</genericDate>
      <genericDate date="2012-05-25" index="4">770.000000000000</genericDate>
    </Balances>
  </CashBalanceLine>
  <CashBalanceLine Id="179" Name="Name3" ParentId="170" level="4">
    <Balances>
      <genericDate date="2012-05-21" index="0">5.000000000000</genericDate>
      <genericDate date="2012-05-22" index="1">6.000000000000</genericDate>
      <genericDate date="2012-05-23" index="2">6.000000000000</genericDate>
      <genericDate date="2012-05-24" index="3">5.000000000000</genericDate>
      <genericDate date="2012-05-25" index="4">6.000000000000</genericDate>
    </Balances>
  </CashBalanceLine>
</CashBalanceResult>

<强度 > XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="node()|@*">
    <xsl:apply-templates select="node()|@*"/>
  </xsl:template>

  <xsl:template match="CashBalanceResult">
    <xsl:text>Name,</xsl:text>
    <xsl:value-of select="*[1]/Balances/*/@date" separator=","/>
    <xsl:text>&#xA;</xsl:text>
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="CashBalanceLine">
    <xsl:value-of select="concat(@Name, , )"/>
    <xsl:value-of select="Balances/*" separator=","/>
    <xsl:if test="following-sibling::CashBalanceLine">
      <xsl:text>&#xA;</xsl:text>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>

<强度 > 输出

Name,2012-05-21,2012-05-22,2012-05-23,2012-05-24,2012-05-25
Name1,10.000000000000,20.000000000000,30.000000000000,40.000000000000,50.000000000000
Name2,340.000000000000,440.000000000000,550.000000000000,660.000000000000,770.000000000000
Name3,5.000000000000,6.000000000000,6.000000000000,5.000000000000,6.000000000000
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="CashBalanceResult">
    <xsl:text>Name,</xsl:text>
    <xsl:value-of select="*/Balances/genericDate[@index=0]/@date"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="*/Balances/genericDate[@index=1]/@date"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="*/Balances/genericDate[@index=2]/@date"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="*/Balances/genericDate[@index=3]/@date"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="*/Balances/genericDate[@index=4]/@date"/>
    <xsl:text>&#xA;</xsl:text>
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="CashBalanceLine">
    <xsl:value-of select="concat(@Name, , ,
                  Balances/genericDate[@index=0], , ,
                  Balances/genericDate[@index=1], , ,
                  Balances/genericDate[@index=2], , ,
                  Balances/genericDate[@index=3], , ,
                  Balances/genericDate[@index=4]

                  )"/>

    <xsl:if test="following-sibling::CashBalanceLine">
      <xsl:text>&#xA;</xsl:text>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>

您在每行都有固定的 genericDate 元素数, 例如, 在 XSLT 1.0 中实际上有相当容易的通用方法 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <xsl:strip-space elements="*" />

  <xsl:template match="CashBalanceResult">
    <xsl:text>name</xsl:text>
    <xsl:apply-templates select="CashBalanceLine[1]" mode="titles" />
    <xsl:text>&#10;</xsl:text>
    <xsl:apply-templates />
  </xsl:template>

  <xsl:template match="genericDate" mode="titles">
    <xsl:text>,</xsl:text>
    <xsl:value-of select="@date" />
  </xsl:template>

  <xsl:template match="CashBalanceLine">
    <xsl:value-of select="@Name" />
    <xsl:apply-templates />
    <xsl:text>&#10;</xsl:text>
  </xsl:template>

  <xsl:template match="genericDate">
    <xsl:text>,</xsl:text>
    <xsl:value-of select="." />
  </xsl:template>
</xsl:stylesheet>




相关问题
When test hanging in an infinite loop

I m tokenising a string with XSLT 1.0 and trying to prevent empty strings from being recognised as tokens. Here s the entire function, based on XSLT Cookbook: <xsl:template name="tokenize"> ...

quick xslt for-each question

Let s say I have an XML document that has this: <keywords> <keyword>test</keyword> <keyword>test2</keyword> <keyword>test3</keyword> <keyword>test4</...

XSLT Transform XML with Namespaces

I m trying to transform some XML into HTML using XSLT. Problem: I can t get it to work. Can someone tell me what I m doing wrong? XML: <ArrayOfBrokerage xmlns:i="http://www.w3.org/2001/...

XSLT output to HTML

In my XSLT file, I have the following: <input type="button" value= <xsl:value-of select="name">> It s an error as it violates XML rule. What I actually want is having a value from an ...

Mangling IDs and References to IDs in XML

I m trying to compose xml elements into each other, and the problem I am having is when there s the same IDs. Basically what I need to do is mangle all the IDs in an xml file, as well as the ...

Sharepoint 2007 Data view Webpart custom parameters

I m sort of new to the custom parameters that can be setup on a DataView Webpart. There are 6 options: - None - Control - Cookie - Form - QueryString - Server Variable I think that None, Cookie and ...

热门标签