3

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

我的主表是一个用户列表,该表中的每一行都映射到角色表中的许多行。当我以 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

如果您对如何完成此操作有任何想法,请告诉我。

4

1 回答 1

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
于 2012-10-28T23:51:57.487 回答