如何基于具有一对多关系的XML数据源进行报告?

时间:2012-10-21 18:01:50

标签: xml xpath jasper-reports

我需要从具有一对多关系的 XML数据源中使用 iReport 编写报告。

我的主表是用户列表,此表中的每一行都映射到角色表中的许多行。当我将信息作为XML文档获取时,它具有以下结构:

<results>
  <user>
    <name>John Smith</name>
    <id>12345</id>
    <roles>
      <role>
        <name>Reports on Self</name>
        <id>50</id>
      </role>
      <role>
        <name>Reports on Others</name>
        <id>51</id>
      </role>
    </roles>
  </user>
  <user>
    <name>Jane Doe</name>
    <id>54321</id>
    <roles>
      <role>
        <name>Reports on Any</name>
        <id>53</id>
      </role>
      <role>
        <name>Changes to Any</name>
        <id>63</id>
      </role>
    </roles>
  </user>
</results>

我需要的是结果显示如此。我已经找到了有关如何使用子查询执行类似操作的信息,但我没有直接连接到数据库。我需要从XML文档中运行报告。

List of Users:
12345       John Smith
            Roles:
               Reports on Self
               Reports on Others

54321       Jane Doe
            Roles:
               Reports on Any
               Changes to Any

如果您对如何实现这一目标有任何想法,请告诉我。

1 个答案:

答案 0 :(得分:0)

不幸的是,你不能用XPath做你的要求,因为它只对查询XML中的元素有用。但是像XSLT这样的东西,这是可能的。

使用上面的文件,使用下面的XSLT ......

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="text"/>
<xsl:template match="/">
    <xsl:text>List of Users:
    </xsl:text>
    <xsl:apply-templates/>
</xsl:template>
<xsl:template match="user">
    <xsl:value-of select="id"/>
    <xsl:text>       </xsl:text>
    <xsl:value-of select="name"/>
    <xsl:text>
    </xsl:text>
    <xsl:apply-templates select="roles"/>
</xsl:template>
<xsl:template match="roles">
    <xsl:text>            Roles:
    </xsl:text>
    <xsl:apply-templates/>
</xsl:template>
<xsl:template match="role">
    <xsl:text>               </xsl:text>
    <xsl:value-of select="name"/>
    <xsl:text>
    </xsl:text>
</xsl:template>
</xsl:stylesheet>

...你得到以下输出:

List of Users:
    12345       John Smith
                Roles:
                   Reports on Self
                   Reports on Others
    54321       Jane Doe
                Roles:
                   Reports on Any
                   Changes to Any