1

我对 xslt 很陌生,正在努力学习。转换我的数据 xml 并将输出 xml 绑定到 adobe 表单的重点。

我有以下结构的 xml。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<envelope xmlns="http://www.mydata.de/xem/reporting/datafile">
<sources>
    <source>
        <data>
            <REPORT>
                <EM_ESOURCE>
                    <EM_ES_MEASURE>
                        <ID>1037343</ID>
                        <ES_ID>1006222</ES_ID>
                        <ES_NAME>MFC-D-002</ES_NAME>
                        <EM_MAT_NAME>Cyprinella leedsi</EM_MAT_NAME>
                        <START_DATE>1/19/98</START_DATE>
                        <LABORATORY>Thornton</LABORATORY>
                        <LC50>&gt;100%</LC50>
                        <TESTTYPE/>
                        <IC25/>
                    </EM_ES_MEASURE>
                    <EM_ES_MEASURE>
                        <ID>1037344</ID>
                        <ES_ID>1006222</ES_ID>
                        <ES_NAME>MFC-D-002</ES_NAME>
                        <EM_MAT_NAME>C Dubia</EM_MAT_NAME>
                        <START_DATE>3/2/98</START_DATE>
                        <LABORATORY>Thornton</LABORATORY>
                        <LC50>&gt;120%</LC50>
                        <TESTTYPE>Routine</TESTTYPE>
                        <IC25/>
                    </EM_ES_MEASURE>
                </EM_ESOURCE>
            </REPORT>
        </data>
    </source>
</sources>

这是其中一个查询的结果。Adobe 报告要求材料始终以特定顺序显示,无论查询返回什么内容。所以我决定在内部对 xsl 中的材料顺序进行硬编码,在这个列表上循环,然后从数据 xml 中获取相应的“LC50”值。

以下是我开始的 xsl:

<?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rep="http://www.technidata.de/xem/reporting/datafile"
xmlns:s="http:/materials.data"
xmlns:java="http://xml.apache.org/xslt/java">
<xsl:output method="html" omit-xml-declaration="yes" encoding="UTF-8"/>      
<!-- Suppress copy of restrictions -->
<!--xsl:template match="text()|@*"/-->  
<xsl:key name="material-lookup" match="s:material" use="s:name"/>
<xsl:template match="/">
 <REPORT>
        <HEADERS>
            <STARTDATE><xsl:value-of select="substring(/rep:envelope/rep:sources/rep:restrictions/rep:START_DATE,1,10)"/></STARTDATE>
            <ENDDATE><xsl:value-of select="substring(/rep:envelope/rep:sources/rep:restrictions/rep:START_DATE,16,24)"/></ENDDATE>
            <FACILITY><xsl:value-of select="normalize-space(/rep:envelope/rep:sources/rep:restrictions/rep:ID_ATTRIBUTE_ID_NAME)"/></FACILITY>
        </HEADERS>
        <MATERIALS>         
        </MATERIALS>
         </REPORT></xsl:template>
     <s:materials>
<s:material>
    <s:name>Cyprinella leedsi</s:name>
    <s:parameter>LC(ROUTINE) </s:parameter>
</s:material>
 <s:material>
    <s:name>C Dubia</s:name>
    <s:parameter>LC50(ROUTINE) </s:parameter>
 </s:material>
</s:materials>
</xsl:stylesheet>

我不确定如何按照 xslt 中定义的顺序以及数据 xml 中相应的 LC50 值使用材料填充 MATERIALS 节点。

4

1 回答 1

0

使用该document('')函数将 XPath 导入 XSLT 文件本身。

于 2012-09-18T13:07:01.067 回答