【发布时间】:2016-02-16 12:39:35
【问题描述】:
我正在创建一个 XSL 样式表来将 XML 文件转换为预先格式化的 Excel。其中一列是下面的 CCI_REF。但是,每个 Vuln_Num 可以有多个 CCI_REF 编号,如下所示。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CHECKLIST>
<STIGS>
<iSTIG>
<VULN>
<STIG_DATA>
<VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>V-1070</ATTRIBUTE_DATA>
</STIG_DATA>
<STIG_DATA>
<VULN_ATTRIBUTE>CCI_REF</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>CCI-000192</ATTRIBUTE_DATA>
</STIG_DATA>
<STIG_DATA>
<VULN_ATTRIBUTE>CCI_REF</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>CCI-000193</ATTRIBUTE_DATA>
</STIG_DATA>
<STIG_DATA>
<VULN_ATTRIBUTE>CCI_REF</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>CCI-000194</ATTRIBUTE_DATA>
</STIG_DATA>
</VULN>
</iSTIG>
</STIGS>
</CHECKLIST>
我尝试使用 xsl:for-each,但它现在实际上没有返回任何内容。我猜它是 for-each 行中的参考,但我已经尝试了我能想到的所有组合并且没有产生任何影响。缩写 XSL:
<xsl:call-template name="front_page" />
<Worksheet>
<xsl:attribute name="ss:Name">
<xsl:value-of select="$vhostname" />
</xsl:attribute>
<Table>
<xsl:for-each select="STIGS/iSTIG/VULN">
<xsl:sort select="STIG_DATA/VULN_ATTRIBUTE[node()='Rule_Ver']/../ATTRIBUTE_DATA" order="ascending" />
<Row>
<Cell ss:StyleID="stig_rules"> <!-- VMS Key -->
<Data ss:Type="String">
<xsl:value-of select="STIG_DATA/VULN_ATTRIBUTE[node()='Vuln_Num']/../ATTRIBUTE_DATA" />
</Data>
</Cell>
<Cell ss:StyleID="stig_rules"> <!-- CCI Number -->
<Data ss:Type="String">
<xsl:for-each select="STIG_DATA/VULN_ATTRIBUTE/CCI_REF">
<xsl:value-of select="STIG_DATA/VULN_ATTRIBUTE[node()='CCI_REF']/../ATTRIBUTE_DATA" />
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</Data>
</Cell>
</Row
</Table>
</Worksheet>
谢谢。肖恩。
【问题讨论】: