2013-10-25 9 views
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> 

ответ

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> 
+0

Спасибо за быстрый ответ, по-прежнему не работает – SoBeK

+0

@SoBeK - Вы обновить все пути? Если у меня есть минута, я попробую сам и посмотрю, есть ли что-то еще неправильное. –

+0

Да (спасибо за быстрый ответ) Измененный XSL

SoBeK

Смежные вопросы