未定义的命名空间问题

时间:2013-10-25 15:43:54

标签: xml xslt xslt-1.0

“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>

1 个答案:

答案 0 :(得分:0)

使用前缀(任意前缀)在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>
相关问题