1

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

1 回答 1

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>
于 2013-10-25T15:52:08.110 回答