在执行xslt转换后无法从xml读取参数

时间:2014-12-10 10:09:55

标签: java xslt xslt-1.0

我有以下xml ..

<?xml version="1.0" encoding="UTF-8"?>
<Report name="DB232  Report">
<rptHdr>
<exchNam>CAG</exchNam>
<rptCod>RP202</rptCod>
<rptNam>ory Report</rptNam>
<membLglNam>XYZ  Germany</membLglNam>
<membId>XY</membId>
<rptPrntEffDat>2013-07-18T23:59:00</rptPrntEffDat>
<rptPrntRunDat>2013-07-18</rptPrntRunDat>
</rptHdr>
<reportNameGrp>
</Report>

现在我正在编写关于xslt 1.0的xslt我现在已经从上面的xml开发了下面的xslt我希望tit读取参数exchNam哪个值是CAG,我的xslt如下所示

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xslt/java"
    exclude-result-prefixes="java">

    <xsl:template match="/Report">
    <pprexMessageObject>
        <xsl:choose>
        <xsl:when test="/Report/rptHdr/rptNam='ory Report'">
                 <xsl:call-template name="rexReportHeader_template">
                    <xsl:with-param name="reportheader" select="/Report/rptHdr" />
                </xsl:call-template>
            </xsl:when>
            </xsl:choose>
    </EurexMessageObject>
    </xsl:template>


<xsl:template name="rexReportHeader_template">
        <xsl:param name="reportheader" />
        <rexMessageObject>
        <exchNam>
        <xsl:value-of select="$reportheader/exchNam"/>
        </exchNam>
        </pprexMessageObject>
</xsl:template>
</xsl:stylesheet>

但转换后我仍然无法查看exchNam参数的值,请告知我的xslt出了什么问题

伙计们请告知

1 个答案:

答案 0 :(得分:0)

1-“reportNameGrp”没有结束标记。纠正它。

2-删除所有匹配的第一个'/',选择并测试参数。一旦告诉模板匹配Report标记,就不需要将它添加到XML路径。

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xslt/java"
    exclude-result-prefixes="java">

    <xsl:template match="Report">
    <pprexMessageObject>
        <xsl:choose>
        <xsl:when test="rptHdr/rptNam='ory Report'">
                 <xsl:call-template name="rexReportHeader_template">
                    <xsl:with-param name="reportheader" select="rptHdr" />
                </xsl:call-template>
            </xsl:when>
            </xsl:choose>
    </EurexMessageObject>
    </xsl:template>


<xsl:template name="rexReportHeader_template">
        <xsl:param name="reportheader" />
        <rexMessageObject>
        <exchNam>
        <xsl:value-of select="$reportheader/exchNam"/>
        </exchNam>
        </pprexMessageObject>
</xsl:template>
</xsl:stylesheet>