"xmlns="VL01" 似乎导致样式表失败(如果删除则工作正常),不知道如何解决样式表。 我觉得这是基本的XLST 101,但我很难用我的大脑包裹它。 任何协助将不胜感激。 干杯
.XML
<?xml version="1.0" encoding="utf-8"?>
<Report xsi:schemaLocation="VL01 http://site.com/ReportServer?%2FVMS%20Reports%2FVL01&rs%3ACommand=Render&rs%3AFormat=XML&rs%3ASessionID=lk44ff55z5q3ck3b5pfuxo45&rc%3ASchema=True" Name="VL01" textbox41="VL01 - Checklist Report
" textbox1946=" 2) Target Element
 Target Element List
 Windows 7
3) Report Options
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="VL01">
<list2>
<Item_Collection>
<Item />
</Item_Collection>
</list2>
<list1>
<list1_Details_Group_Collection>
<list1_Details_Group
Key="V0001070"
EffectiveDate="04 Mar 1998 16:03:47:000"
LongName2="Name..."/>
</list1_Details_Group_Collection>
</list1>
</Report>
XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" version="4.0" indent="yes"/>
<xsl:variable name="var-checklist_name">
<xsl:value-of select="substring-after(substring-before(translate(Report/@textbox1946, '
', ''),'3)'),'Target Element List')"/>
</xsl:variable><xsl:template match="/">
<html>
<body>
<table>
<xsl:apply-templates select="Report/list1/list1_Details_Group_Collection"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="Report/list1/list1_Details_Group_Collection">
<xsl:for-each select="list1_Details_Group">
<Import_List>
<Checklist_Name>
<xsl:value-of select="normalize-space(translate($var-checklist_name, ' ', ' '))"/>
</Checklist_Name>
<Vuln_ID><xsl:value-of select="number(substring-after(@VulKey,'V'))"/></Vuln_ID>
<Short_Name><xsl:value-of select="substring(@LongName2,1,255)"/></Short_Name>
<Release_Date><xsl:value-of select="substring(@EffectiveDate,1,11)"/></Release_Date>
</Import_List>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
在xsl:stylesheet
中声明带有前缀(任何前缀)的命名空间。例:
xmlns:vl="VL01"
更新路径以包含前缀。例:
match="vl:Report/vl:list1/vl:list1_Details_Group_Collection"
此更新版本将产生输出。除了命名空间声明和更新所有带有前缀的路径之外,我还必须更改 xsl:output
中的版本。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:vl="VL01">
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:variable name="var-checklist_name">
<xsl:value-of select="substring-after(substring-before(translate(Report/@textbox1946, '
', ''),'3)'),'Target Element List')"/>
</xsl:variable>
<xsl:template match="/">
<html>
<body>
<table>
<xsl:apply-templates select="vl:Report/vl:list1/vl:list1_Details_Group_Collection"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="vl:Report/vl:list1/vl:list1_Details_Group_Collection">
<xsl:for-each select="vl:list1_Details_Group">
<Import_List>
<Checklist_Name>
<xsl:value-of select="normalize-space(translate($var-checklist_name, ' ', ' '))"/>
</Checklist_Name>
<Vuln_ID><xsl:value-of select="number(substring-after(@VulKey,'V'))"/></Vuln_ID>
<Short_Name><xsl:value-of select="substring(@LongName2,1,255)"/></Short_Name>
<Release_Date><xsl:value-of select="substring(@EffectiveDate,1,11)"/></Release_Date>
</Import_List>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>