2013-10-14 1 views
0

У меня нет опыта работы с XSLT. Я пробовал следовать нескольким онлайн-учебникам, в том числе и на W3C, но без успеха. Я пытаюсь создать HTML-страницу из XML, созданного инструментом командной строки Visual Studio Code Metrics. XML выглядит следующим образом:Помощь с XSLT?

<?xml version="1.0" encoding="utf-8"?> 
<CodeMetricsReport Version="10.0"> 
<Targets> 
<Target Name="C:\Users\rs02130\Documents\Visual Studio 2010\Projects\TestVS10XML\TestVS10XML\Bin\Debug\TestVS10XML.dll"> 
    <Modules> 
     <Module Name="TestVS10XML.dll" AssemblyVersion="1.0.0.0" FileVersion="1.0.0.0"> 
      <Metrics> 
      <Metric Name="MaintainabilityIndex" Value="97" /> 
      <Metric Name="CyclomaticComplexity" Value="10" /> 
      <Metric Name="ClassCoupling" Value="8" /> 
      <Metric Name="DepthOfInheritance" Value="5" /> 
      <Metric Name="LinesOfCode" Value="4" /> 
      </Metrics> 
      <Namespaces> 
      <Namespace Name="TestVS10XML"> 
       <Metrics> 
       <Metric Name="MaintainabilityIndex" Value="97" /> 
       <Metric Name="CyclomaticComplexity" Value="10" /> 
       <Metric Name="ClassCoupling" Value="8" /> 
       <Metric Name="DepthOfInheritance" Value="5" /> 
       <Metric Name="LinesOfCode" Value="4" /> 
       </Metrics> 
       <Types> 
       <Type Name="_Default"> 
        <Metrics> 
        <Metric Name="MaintainabilityIndex" Value="91" /> 
        <Metric Name="CyclomaticComplexity" Value="2" /> 
        <Metric Name="ClassCoupling" Value="5" /> 
        <Metric Name="DepthOfInheritance" Value="4" /> 
        <Metric Name="LinesOfCode" Value="2" /> 
        </Metrics> 
        <Members> 
        <Member Name="Page_Load(object, EventArgs) : void" File="C:\Users\rs02130\Documents\Visual Studio 2010\Projects\TestVS10XML\TestVS10XML\Default.aspx.cs" Line="14"> 
         <Metrics> 
         <Metric Name="MaintainabilityIndex" Value="90" /> 
         <Metric Name="CyclomaticComplexity" Value="1" /> 
         <Metric Name="ClassCoupling" Value="4" /> 
         <Metric Name="LinesOfCode" Value="1" /> 
         </Metrics> 
        </Member> 
        <Member Name="_Default()"> 
         <Metrics> 
         <Metric Name="MaintainabilityIndex" Value="100" /> 
         <Metric Name="CyclomaticComplexity" Value="1" /> 
         <Metric Name="ClassCoupling" Value="1" /> 
         <Metric Name="LinesOfCode" Value="1" /> 
         </Metrics> 
        </Member> 
        </Members> 
       </Type> 
       <Type Name="SiteMaster"> 
        <Metrics> 
        <Metric Name="MaintainabilityIndex" Value="100" /> 
        <Metric Name="CyclomaticComplexity" Value="2" /> 
        <Metric Name="ClassCoupling" Value="3" /> 
        <Metric Name="DepthOfInheritance" Value="5" /> 
        <Metric Name="LinesOfCode" Value="1" /> 
        </Metrics> 
        <Members> 
        <Member Name="Page_Load(object, EventArgs) : void" File="C:\Users\rs02130\Documents\Visual Studio 2010\Projects\TestVS10XML\TestVS10XML\Site.Master.cs" Line="13"> 
         <Metrics> 
         <Metric Name="MaintainabilityIndex" Value="100" /> 
         <Metric Name="CyclomaticComplexity" Value="1" /> 
         <Metric Name="ClassCoupling" Value="1" /> 
         <Metric Name="LinesOfCode" Value="0" /> 
         </Metrics> 
        </Member> 
        <Member Name="SiteMaster()"> 
         <Metrics> 
         <Metric Name="MaintainabilityIndex" Value="100" /> 
         <Metric Name="CyclomaticComplexity" Value="1" /> 
         <Metric Name="ClassCoupling" Value="1" /> 
         <Metric Name="LinesOfCode" Value="1" /> 
         </Metrics> 
        </Member> 
        </Members> 
       </Type> 
       <Type Name="Global"> 
        <Metrics> 
        <Metric Name="MaintainabilityIndex" Value="100" /> 
        <Metric Name="CyclomaticComplexity" Value="6" /> 
        <Metric Name="ClassCoupling" Value="2" /> 
        <Metric Name="DepthOfInheritance" Value="2" /> 
        <Metric Name="LinesOfCode" Value="1" /> 
        </Metrics> 
        <Members> 
        <Member Name="Application_Start(object, EventArgs) : void" File="C:\Users\rs02130\Documents\Visual Studio 2010\Projects\TestVS10XML\TestVS10XML\Global.asax.cs" Line="14"> 
         <Metrics> 
         <Metric Name="MaintainabilityIndex" Value="100" /> 
         <Metric Name="CyclomaticComplexity" Value="1" /> 
         <Metric Name="ClassCoupling" Value="1" /> 
         <Metric Name="LinesOfCode" Value="0" /> 
         </Metrics> 
        </Member> 
        <Member Name="Application_End(object, EventArgs) : void" File="C:\Users\rs02130\Documents\Visual Studio 2010\Projects\TestVS10XML\TestVS10XML\Global.asax.cs" Line="20"> 
         <Metrics> 
         <Metric Name="MaintainabilityIndex" Value="100" /> 
         <Metric Name="CyclomaticComplexity" Value="1" /> 
         <Metric Name="ClassCoupling" Value="1" /> 
         <Metric Name="LinesOfCode" Value="0" /> 
         </Metrics> 
        </Member> 
        <Member Name="Application_Error(object, EventArgs) : void" File="C:\Users\rs02130\Documents\Visual Studio 2010\Projects\TestVS10XML\TestVS10XML\Global.asax.cs" Line="26"> 
         <Metrics> 
         <Metric Name="MaintainabilityIndex" Value="100" /> 
         <Metric Name="CyclomaticComplexity" Value="1" /> 
         <Metric Name="ClassCoupling" Value="1" /> 
         <Metric Name="LinesOfCode" Value="0" /> 
         </Metrics> 
        </Member> 
        <Member Name="Session_Start(object, EventArgs) : void" File="C:\Users\rs02130\Documents\Visual Studio 2010\Projects\TestVS10XML\TestVS10XML\Global.asax.cs" Line="32"> 
         <Metrics> 
         <Metric Name="MaintainabilityIndex" Value="100" /> 
         <Metric Name="CyclomaticComplexity" Value="1" /> 
         <Metric Name="ClassCoupling" Value="1" /> 
         <Metric Name="LinesOfCode" Value="0" /> 
         </Metrics> 
        </Member> 
        <Member Name="Session_End(object, EventArgs) : void" File="C:\Users\rs02130\Documents\Visual Studio 2010\Projects\TestVS10XML\TestVS10XML\Global.asax.cs" Line="38"> 
         <Metrics> 
         <Metric Name="MaintainabilityIndex" Value="100" /> 
         <Metric Name="CyclomaticComplexity" Value="1" /> 
         <Metric Name="ClassCoupling" Value="1" /> 
         <Metric Name="LinesOfCode" Value="0" /> 
         </Metrics> 
        </Member> 
        <Member Name="Global()"> 
         <Metrics> 
         <Metric Name="MaintainabilityIndex" Value="100" /> 
         <Metric Name="CyclomaticComplexity" Value="1" /> 
         <Metric Name="ClassCoupling" Value="1" /> 
         <Metric Name="LinesOfCode" Value="1" /> 
         </Metrics> 
        </Member> 
        </Members> 
       </Type> 
       </Types> 
      </Namespace> 
      </Namespaces> 
     </Module> 
     </Modules> 
    </Target> 
    </Targets> 
</CodeMetricsReport> 

Я только хочу, чтобы отчет включать показатели верхнего уровня:

<Module Name="TestVS10XML.dll" AssemblyVersion="1.0.0.0" FileVersion="1.0.0.0"> 
    <Metrics> 
    <Metric Name="MaintainabilityIndex" Value="97" /> 
    <Metric Name="CyclomaticComplexity" Value="10" /> 
    <Metric Name="ClassCoupling" Value="8" /> 
    <Metric Name="DepthOfInheritance" Value="5" /> 
    <Metric Name="LinesOfCode" Value="4" /> 
    </Metrics> 

Не вся информация о пространстве имен под ним. Я придумал этот XSLT (не включая имя модуля, которое мне тоже очень понравилось), но когда я его запускаю, я получаю заголовки столбцов, никаких данных в таблице. Любая помощь очень ценится ...

XSLT:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 
<xsl:output method="html" indent="yes"/> 
    <xsl:template match="/"> 
    <table width="100%" align="center" cellpadding="0" cellspacing="0" border="1" 
     style="font-family:verdana;font-size:10pt;border:1"> 
<tr> 
    <td width="20%" align="left" > 
    Maintainability Index 
    </td> 
    <td width="20%" align="left"> 
    Cyclomatic Complexity 
    </td> 
    <td width="20%" align="left"> 
    Class Coupling 
    </td> 
    <td width="20%" align="left"> 
    Depth Of Inheritance 
    </td> 
    <td width="20%" align="left"> 
    Lines Of Code 
    </td> 
</tr> 
    </table> 
<xsl:for-each select="Targets/Modules/Metrics"> 
<table width="100%" align="center" cellpadding="0" cellspacing="0" border="1" 
    style="font-family:verdana;font-size:10pt;border:1"> 
    <tr > 
     <td width="20%" align="left" > 
     <xsl:value-of select="MaintainabilityIndex"/> 
    </td> 
    <td width="20%" align="left" > 
      <xsl:value-of select="CyclomaticComplexity"/> 
    </td> 
    <td width="20%" align="left" > 
     <xsl:value-of select="ClassCoupling"/> 
    </td> 
    <td width="20%" align="left" > 
     <xsl:value-of select="DepthOfInheritance"/> 
    </td> 
    <td width="20%" align="left" > 
     <xsl:value-of select="LinesOfCode"/> 
    </td> 
    </tr> 
</table> 
</xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 
+1

Я не верю, что есть онлайн учебник по W3C. Если вы имеете в виду w3schools, помните, что это не связано с W3C. Вообще, я думаю, что попытка научиться XSLT из такого учебника не является хорошим подходом. Получите себе хорошую книгу, которая правильно объясняет концепции. –

ответ

0
<!-- you don't use the msxsl namespace, you could drop its declaration --> 
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    exclude-result-prefixes="msxsl" 
> 
    <xsl:output method="html" indent="yes"/> 

    <xsl:template match="CodeMetricsReport"> 
    <!-- you really ought to do all this styling in CSS --> 
    <table width="100%" align="center" cellpadding="0" cellspacing="0" border="1" 
     style="font-family:verdana;font-size:10pt;border:1"> 
     <tr> 
     <td width="20%" align="left">Maintainability Index</td> 
     <td width="20%" align="left">Cyclomatic Complexity</td> 
     <td width="20%" align="left">Class Coupling</td> 
     <td width="20%" align="left">Depth Of Inheritance</td> 
     <td width="20%" align="left">Lines Of Code</td> 
     </tr> 

     <!-- that's what you forgot --> 
     <xsl:apply-templates select="Targets/Target/Modules/Module/Metrics" /> 
    </table> 
    </xsl:template> 

    <xsl:template match="Metrics"> 
    <tr> 
     <td width="20%" align="left"> 
     <xsl:value-of select="Metric[@Name = 'MaintainabilityIndex']/@Value" /> 
     </td> 
     <td width="20%" align="left"> 
     <xsl:value-of select="Metric[@Name = 'CyclomaticComplexity']/@Value" /> 
     </td> 
     <td width="20%" align="left"> 
     <xsl:value-of select="Metric[@Name = 'ClassCoupling']/@Value" /> 
     </td> 
     <td width="20%" align="left"> 
     <xsl:value-of select="Metric[@Name = 'DepthOfInheritance']/@Value" /> 
     </td> 
     <td width="20%" align="left"> 
     <xsl:value-of select="Metric[@Name = 'LinesOfCode']/@Value" /> 
     </td> 
    </tr> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Если бы я хотел научиться XSLT для долгосрочного использования, у меня было бы несколько хороших книг. Этот вид просто выскочил на меня как часть еще одной работы. Я закончил с XML-файлом и попросил превратить его в HTML-страницу. Никогда не делал этого раньше ... –

+0

Спасибо за помощь @ Майкл Кей. Если бы я мог задать еще одну вещь. Есть ли способ вставить значение «имя» либо над таблицей, либо как первая строка таблицы, которая даст мне все, что мне нужно. Если они вернутся и попросят больше (т. Е. Пространства имен), тогда я пойду возьму книгу или две. Еще раз спасибо. –

+0

Э-э ... Я не Майкл Кей. Вы хотите спросить его? – Tomalak

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