使用XSLT转换XML以构建表

时间:2019-07-17 13:46:58

标签: xslt-1.0

我有一个XML文件,其内容如下:

<export>
<row>
    <field tableshort="PR" fieldno="7006">2018/12/2180000101/O</field>
    <field tableshort="PR" fieldno="7007">42</field>
    <field tableshort="AP" fieldno="4">GD S408.810</field>
    <field tableshort="AP" fieldno="40" value="0">12</field>
    <field tableshort="C001" fieldno="4">GD S408.811241</field>
    <field tableshort="C001" fieldno="4">13</field>
</row>
<row>
    <field tableshort="PR" fieldno="7006">2018/12/2180000101/O</field>
    <field tableshort="PR" fieldno="7007">42</field>
    <field tableshort="AP" fieldno="4">GD S408.810</field>
    <field tableshort="AP" fieldno="40" value="0">12</field>
    <field tableshort="C001" fieldno="4">GD S408.81XXA</field>
    <field tableshort="C001" fieldno="4">18</field>
</row>
<row>
    <field tableshort="PR" fieldno="7006">2018/12/2180000101/O</field>
    <field tableshort="PR" fieldno="7007">42</field>
    <field tableshort="AP" fieldno="4">GD S408.810</field>
    <field tableshort="AP" fieldno="40" value="0">12</field>
    <field tableshort="C001" fieldno="4">GD S408.BFSSF</field>
    <field tableshort="C001" fieldno="4">220</field>
</row>
<row>
    <field tableshort="PR" fieldno="7006">2018/12/2180000101/O</field>
    <field tableshort="PR" fieldno="7007">42</field>
    <field tableshort="AP" fieldno="4">XX1</field>
    <field tableshort="AP" fieldno="40" value="0">16</field>
    <field tableshort="C001" fieldno="4">GD S408.811241</field>
    <field tableshort="C001" fieldno="4">21</field>
</row>
<row>
    <field tableshort="PR" fieldno="7006">2018/12/2180000101/O</field>
    <field tableshort="PR" fieldno="7007">42</field>
    <field tableshort="AP" fieldno="4">XX1</field>
    <field tableshort="AP" fieldno="40" value="0">16</field>
    <field tableshort="C001" fieldno="4">GD S408.81FSS</field>
    <field tableshort="C001" fieldno="4">13</field>
</row>
<row>
    <field tableshort="PR" fieldno="7006">2018/12/2180000101/O</field>
    <field tableshort="PR" fieldno="7007">42</field>
    <field tableshort="AP" fieldno="4">XX1</field>
    <field tableshort="AP" fieldno="40" value="0">16</field>
    <field tableshort="C001" fieldno="4">GD S408.811PKA</field>
    <field tableshort="C001" fieldno="4">17</field>
</row>

并且我想使用XSLT(1.0)转换来转换此内容并实现如所附图片一样的效果,这是带有标记映射的html表

Screen with value mapping

附加的XML仅是示例。我们有超过1000行的XML,因此我需要构建一个循环或几个循环来自动获取这些值。

这是我目前正在工作的代码:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" media-type="text/xml" />

<xsl:param name="ImageFolder">.</xsl:param>
<xsl:param name="Font">Verdana</xsl:param>
<xsl:param name="FontHeader">Cera Pro</xsl:param>
<xsl:param name="FontSize">8</xsl:param>
<xsl:param name="CellPadding">2.0</xsl:param>
<xsl:param name="CellSpacing">0.0</xsl:param>
<xsl:param name="HeaderBackgroundColor">#92bcde</xsl:param>
<xsl:param name="HeaderBorderColor">#92bcde</xsl:param>
<xsl:param name="HeaderBorderWidth">1.0</xsl:param>
<xsl:param name="AlternateCellBackgroundColor">#F0F0F0</xsl:param>
<xsl:param name="Leading">8</xsl:param>
<xsl:param name="Count"/>
<xsl:param name="Ext">.png</xsl:param>
<xsl:param name="PozCheck"/>
<xsl:param name="PozCheck5"/>
<xsl:param name="count" />


<xsl:template match="/" >


<xsl:variable name="NumberOfColumns" 
select="count(export/fields/field)"/>
<itext pagesize="A4" orientation="portrait">

<xsl:for-each select="//row">


<xsl:variable name="Duplicate1">
<xsl:value-of select="field[@fieldno='141' and @tableshort='AP']" />
</xsl:variable>

<xsl:variable name="Duplicate2">
<xsl:value-of select="field[@fieldno='7007' and @tableshort='C001']" />
</xsl:variable>

<xsl:variable name="Loop1">
<xsl:value-of select="field[@fieldno='40' and @tableshort='AP']" />
</xsl:variable>

<xsl:variable name="LoopBreak2">
<xsl:value-of select="field[@fieldno='40' and @tableshort='AP']" />
</xsl:variable>


<xsl:variable name="LoopBreak1">
<xsl:value-of select="field[@fieldno='40' and @tableshort='AP']" />
</xsl:variable>


<xsl:value-of select="'_'"/>
<xsl:value-of select="field[@fieldno='40' and @tableshort='AP']" />


<xsl:for-each select="//row">

<xsl:variable name="Loop2">
<xsl:value-of select="field[@fieldno='40' and @tableshort='AP']" />
</xsl:variable>


<xsl:if test="$Loop1=$Loop2">
<xsl:value-of select="'_'"/>
<xsl:value-of select="field[@fieldno='4' and @tableshort='C001']" />


</xsl:if>


</xsl:for-each>


</xsl:for-each> 
</itext>

</xsl:template> 

请问如何实现这一目标?

0 个答案:

没有答案