未定义的命名空间出现问题



"xmlns="VL01" 似乎导致样式表失败(如果删除则工作正常),不知道如何解决样式表。 我觉得这是基本的XLST 101,但我很难用我的大脑包裹它。 任何协助将不胜感激。 干杯

.XML

<?xml version="1.0" encoding="utf-8"?>
<Report xsi:schemaLocation="VL01 http://site.com/ReportServer?%2FVMS%20Reports%2FVL01&amp;rs%3ACommand=Render&amp;rs%3AFormat=XML&amp;rs%3ASessionID=lk44ff55z5q3ck3b5pfuxo45&amp;rc%3ASchema=True"     Name="VL01"     textbox41="VL01 - Checklist Report&#xD;&#xA;"     textbox1946=" 2) Target Element&#xD;&#xA;     Target Element List&#xD;&#xA;        Windows 7&#xD;&#xA;3) Report Options&#xD;&#xA;    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, '&#xD;&#xA;', ''),'3)'),'Target&#x00A0;Element&#x00A0;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, '&#x00A0;', ' '))"/>
        </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, '&#xD;&#xA;', ''),'3)'),'Target&#x00A0;Element&#x00A0;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, '&#x00A0;', ' '))"/>
                </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>

相关内容

  • 没有找到相关文章