如何定义和读取空 XML 字段?
How to define and read empty XML fields?
我正在使用 Jaspersoft Studio 创建标签。我正在使用 XML 文件和 XMLDataAdapter。这是我的 XML 文件
的示例
<records>
<record>
<metadatas>
<title>first title</title>
<description>descriptions</description>
<keywords />
<!-- ... -->
</metadatas>
</record>
</records>
这里的问题是我想访问关键字字段,在某些情况下可以设置或不设置,但是当我尝试读取数据适配器中的字段时,它们没有显示。
是否有要更改的配置或我可以编译我的 jasperreport 的东西。
没有特殊设置,您只是没有定义与 XPath 查询相关的字段
在您的示例中,您可能喜欢循环记录,因此您的 XPath 查询将是
<queryString language="XPath">
<![CDATA[/records/record]]>
</queryString>
要定义指向 keywords
的字段,您可以使用 fieldDescription
<field name="keywords" class="java.lang.String">
<fieldDescription><![CDATA[metadatas/keywords]]></fieldDescription>
</field>
The name is arbitrary, the class is the representation of value in java and the fieldDescription is relative path to your node related to your queryString
JasperSoft Studio
在 JasperSoft Studio 中,这是通过首先 defining your data adapter,然后右键单击报告节点和 select“数据集和查询”来实现的。在对话框中 select 您的数据适配器和 XPath,然后编写您的 XPath 查询并单击您想要添加的字段作为字段
完整的 jrxml 示例
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="XMLTest" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="b487729d-4510-4485-b838-19c491042208">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="XMLTest"/>
<queryString language="XPath">
<![CDATA[/records/record]]>
</queryString>
<field name="title" class="java.lang.String">
<fieldDescription><![CDATA[metadatas/title]]></fieldDescription>
</field>
<field name="description" class="java.lang.String">
<fieldDescription><![CDATA[metadatas/description]]></fieldDescription>
</field>
<field name="keywords" class="java.lang.String">
<fieldDescription><![CDATA[metadatas/keywords]]></fieldDescription>
</field>
<columnHeader>
<band height="20" splitType="Stretch">
<property name="com.jaspersoft.studio.unit.height" value="pixel"/>
<staticText>
<reportElement x="0" y="0" width="170" height="20" uuid="3ce3004b-8324-4f57-ba9f-77cdffc711da"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[title]]></text>
</staticText>
<staticText>
<reportElement x="170" y="0" width="170" height="20" uuid="6ee7c571-ecdc-45cc-b11d-600099121301"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[description]]></text>
</staticText>
<staticText>
<reportElement x="340" y="0" width="210" height="20" uuid="111fa52f-bc0b-4698-8ba9-a7af03988254"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[keywords]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="20" splitType="Stretch">
<property name="com.jaspersoft.studio.unit.height" value="pixel"/>
<textField>
<reportElement x="0" y="0" width="170" height="20" uuid="444010e8-18ce-4594-a1b1-ca3d120b091d"/>
<textElement verticalAlignment="Middle">
<font isBold="false"/>
</textElement>
<textFieldExpression><![CDATA[$F{title}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="170" y="0" width="170" height="20" uuid="9a27a707-c5df-4905-ac21-e42b21c1d77c"/>
<textElement verticalAlignment="Middle">
<font isBold="false"/>
</textElement>
<textFieldExpression><![CDATA[$F{description}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="340" y="0" width="210" height="20" uuid="1621de6d-7200-49aa-a0d4-56f64fec1b91"/>
<textElement verticalAlignment="Middle">
<font isBold="false"/>
</textElement>
<textFieldExpression><![CDATA[$F{keywords}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
示例数据源
<records>
<record>
<metadatas>
<title>first title</title>
<description>descriptions</description>
<keywords />
</metadatas>
</record>
<record>
<metadatas>
<title>second title</title>
<description>descriptions 2</description>
<keywords>test, hello</keywords>
</metadatas>
</record>
</records><records>
<record>
<metadatas>
<title>first title</title>
<description>descriptions</description>
<keywords />
</metadatas>
</record>
<record>
<metadatas>
<title>second title</title>
<description>descriptions 2</description>
<keywords>test, hello</keywords>
</metadatas>
</record>
</records>
输出
如您所见,对于没有值的节点,它会显示 null
,如果您想显示空文本,只需在相对 textField
[=23 上设置 isBlankWhenNull="true"
=]
我正在使用 Jaspersoft Studio 创建标签。我正在使用 XML 文件和 XMLDataAdapter。这是我的 XML 文件
的示例<records>
<record>
<metadatas>
<title>first title</title>
<description>descriptions</description>
<keywords />
<!-- ... -->
</metadatas>
</record>
</records>
这里的问题是我想访问关键字字段,在某些情况下可以设置或不设置,但是当我尝试读取数据适配器中的字段时,它们没有显示。
是否有要更改的配置或我可以编译我的 jasperreport 的东西。
没有特殊设置,您只是没有定义与 XPath 查询相关的字段
在您的示例中,您可能喜欢循环记录,因此您的 XPath 查询将是
<queryString language="XPath">
<![CDATA[/records/record]]>
</queryString>
要定义指向 keywords
的字段,您可以使用 fieldDescription
<field name="keywords" class="java.lang.String">
<fieldDescription><![CDATA[metadatas/keywords]]></fieldDescription>
</field>
The name is arbitrary, the class is the representation of value in java and the fieldDescription is relative path to your node related to your queryString
JasperSoft Studio
在 JasperSoft Studio 中,这是通过首先 defining your data adapter,然后右键单击报告节点和 select“数据集和查询”来实现的。在对话框中 select 您的数据适配器和 XPath,然后编写您的 XPath 查询并单击您想要添加的字段作为字段
完整的 jrxml 示例
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="XMLTest" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="b487729d-4510-4485-b838-19c491042208">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="XMLTest"/>
<queryString language="XPath">
<![CDATA[/records/record]]>
</queryString>
<field name="title" class="java.lang.String">
<fieldDescription><![CDATA[metadatas/title]]></fieldDescription>
</field>
<field name="description" class="java.lang.String">
<fieldDescription><![CDATA[metadatas/description]]></fieldDescription>
</field>
<field name="keywords" class="java.lang.String">
<fieldDescription><![CDATA[metadatas/keywords]]></fieldDescription>
</field>
<columnHeader>
<band height="20" splitType="Stretch">
<property name="com.jaspersoft.studio.unit.height" value="pixel"/>
<staticText>
<reportElement x="0" y="0" width="170" height="20" uuid="3ce3004b-8324-4f57-ba9f-77cdffc711da"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[title]]></text>
</staticText>
<staticText>
<reportElement x="170" y="0" width="170" height="20" uuid="6ee7c571-ecdc-45cc-b11d-600099121301"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[description]]></text>
</staticText>
<staticText>
<reportElement x="340" y="0" width="210" height="20" uuid="111fa52f-bc0b-4698-8ba9-a7af03988254"/>
<textElement verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<text><![CDATA[keywords]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="20" splitType="Stretch">
<property name="com.jaspersoft.studio.unit.height" value="pixel"/>
<textField>
<reportElement x="0" y="0" width="170" height="20" uuid="444010e8-18ce-4594-a1b1-ca3d120b091d"/>
<textElement verticalAlignment="Middle">
<font isBold="false"/>
</textElement>
<textFieldExpression><![CDATA[$F{title}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="170" y="0" width="170" height="20" uuid="9a27a707-c5df-4905-ac21-e42b21c1d77c"/>
<textElement verticalAlignment="Middle">
<font isBold="false"/>
</textElement>
<textFieldExpression><![CDATA[$F{description}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="340" y="0" width="210" height="20" uuid="1621de6d-7200-49aa-a0d4-56f64fec1b91"/>
<textElement verticalAlignment="Middle">
<font isBold="false"/>
</textElement>
<textFieldExpression><![CDATA[$F{keywords}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
示例数据源
<records>
<record>
<metadatas>
<title>first title</title>
<description>descriptions</description>
<keywords />
</metadatas>
</record>
<record>
<metadatas>
<title>second title</title>
<description>descriptions 2</description>
<keywords>test, hello</keywords>
</metadatas>
</record>
</records><records>
<record>
<metadatas>
<title>first title</title>
<description>descriptions</description>
<keywords />
</metadatas>
</record>
<record>
<metadatas>
<title>second title</title>
<description>descriptions 2</description>
<keywords>test, hello</keywords>
</metadatas>
</record>
</records>
输出
如您所见,对于没有值的节点,它会显示 null
,如果您想显示空文本,只需在相对 textField
[=23 上设置 isBlankWhenNull="true"
=]