Hallo!
Ich arbeite derzeit als Ferialpraktikant und muss mich im Rahmen einer Aufgabenstellung mit XSLT zum ersten mal beschäftigen.
Ich soll von FxCop erzeugte XML-Dateien auswerten und zählen wie viele Critical Errors, Errors, Critical Warnings und wie viele Warnings pro .dll auftreten.
Pro .dll habe ich ein XML-File die in etwa so aussehen (nur ein Ausschnitt)
Da ich mehrere Files habe über die ich die Daten erfassen muss, habe ich mir eine einfache XML Datei geschrieben in der die einzelnen Namen der auszuwertenden Files stehen.
Hier ein Ausschnitt meiner .xls Datei
Problem an der ganzen Sache ist, dass "count(//Issue[@Level='CriticalError'])" und alle anderen counts 0 ergeben.
Kann man in einem Document "//" nicht verwenden?
Bitte beachten: Absolute Angabe mit zB: "Targets/Target/Modules/Module/Messages/Message" wäre möglich, jedoch werden nicht ALLE Issues gefunden, da unter "Namespaces/Namespace/Messages/Message" sich auch noch welche befinden, das XML-File ist also anscheinend schlecht strukturiert...
Kann mir jemand weiterhelfen?
LG
Chri
Ich arbeite derzeit als Ferialpraktikant und muss mich im Rahmen einer Aufgabenstellung mit XSLT zum ersten mal beschäftigen.
Ich soll von FxCop erzeugte XML-Dateien auswerten und zählen wie viele Critical Errors, Errors, Critical Warnings und wie viele Warnings pro .dll auftreten.
Pro .dll habe ich ein XML-File die in etwa so aussehen (nur ein Ausschnitt)
Code:
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="c:\program files\microsoft fxcop 1.36\Xml\FxCopReport.xsl"?> <FxCopReport Version="1.36"> <Namespaces> <Namespace Name="Desktop.AcrobatReaderPlugin"> <Messages> <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Status="Active" Created="2010-07-19 22:59:24Z" FixCategory="Breaking"> <Issue Name="Namespace" Certainty="75" Level="CriticalWarning">Correct the spelling of 'Plugin' in namespace name 'Desktop.AcrobatReaderPlugin'.</Issue> </Message> </Messages> </Namespace> </Namespaces> <Targets> <Target Name="$(ProjectDir)/../../../bin/release/AcrobatReaderPlugin.dll"> <Modules> <Module Name="acrobatreaderplugin.dll"> <Messages> <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Status="Active" Created="2010-07-19 22:59:24Z" FixCategory="Breaking"> <Issue Name="Assembly" Certainty="75" Level="CriticalWarning">Correct the spelling of 'Plugin' in assembly name 'AcrobatReaderPlugin.dll'.</Issue> </Message> </Messages> <Namespaces> <Namespace Name="Desktop.AcrobatReaderPlugin"> <Types> <Type Name="AcrobatReader" Kind="Class" Accessibility="Public" ExternallyVisible="True"> <Members> <Member Name="#.ctor(Desktop.DesktopManagement.WindowManagement.Plugins.IDesktop,4.Desktop.AcrobatReaderPlugin.PluginComponent,System.String)" Kind="Method" Static="False" Accessibility="Public" ExternallyVisible="True"> <Messages> <Message Id="plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Status="Active" Created="2010-07-19 22:59:24Z" FixCategory="Breaking"> <Issue Name="MemberParameter" Certainty="75" Level="CriticalWarning" Path="e:\BuildServer\build_cmake\desktop\AcrobatReaderPlugin" File="AcrobatReader.cs" Line="25">In method 'AcrobatReader.AcrobatReader(IDesktop, PluginComponent, string)', correct the spelling of 'plugin' in parameter name 'pluginComponent' or remove it entirely if it represents any sort of Hungarian notation.</Issue> </Message> </Messages> </Member> <Member Name="#CheckParameter(System.String)" Kind="Method" Static="False" Accessibility="Private" ExternallyVisible="False"> <Messages> <Message TypeName="MarkMembersAsStatic" Category="Microsoft.Performance" CheckId="CA1822" Status="Active" Created="2010-07-19 22:59:24Z" FixCategory="NonBreaking"> <Issue Certainty="95" Level="Warning" Path="e:\BuildServer\build_cmake\desktop\AcrobatReaderPlugin" File="AcrobatReader.cs" Line="54">The 'this' parameter (or 'Me' in Visual Basic) of 'AcrobatReader.CheckParameter(string)' is never used. Mark the member as static (or Shared in Visual Basic) or use 'this'/'Me' in the method body or at least one property accessor, if appropriate.</Issue> </Message> </Messages> </Member> </Members> </Type> <Type Name="Plugin" Kind="Class" Accessibility="Assembly" ExternallyVisible="False"> <Members> <Member Name="#param" Kind="Field" Static="False" Accessibility="Private" ExternallyVisible="False"> <Messages> <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Status="Active" Created="2010-07-19 22:59:24Z" FixCategory="NonBreaking"> <Issue Certainty="75" Level="Warning">It appears that field 'Plugin.param' is never used or is only ever assigned to. Use this field or remove it.</Issue> </Message> </Messages> </Member> </Members> </Type> <Type Name="PluginComponent" Kind="Class" Accessibility="Public" ExternallyVisible="True"> <Messages> <Message Id="Plugin" TypeName="IdentifiersShouldBeSpelledCorrectly" Category="Microsoft.Naming" CheckId="CA1704" Status="Active" Created="2010-07-19 22:59:24Z" FixCategory="Breaking"> <Issue Name="Type" Certainty="75" Level="CriticalWarning">Correct the spelling of 'Plugin' in type name 'PluginComponent'.</Issue> </Message> </Messages> <Members> <Member Name="#isInitialized" Kind="Field" Static="False" Accessibility="Private" ExternallyVisible="False"> <Messages> <Message TypeName="AvoidUnusedPrivateFields" Category="Microsoft.Performance" CheckId="CA1823" Status="Active" Created="2010-07-19 22:59:24Z" FixCategory="NonBreaking"> <Issue Certainty="75" Level="Warning">It appears that field 'PluginComponent.isInitialized' is never used or is only ever assigned to. Use this field or remove it.</Issue> </Message> </Messages> </Member> </Members> </Type> </Types> </Namespace> </Namespaces> </Module> </Modules> </Target>
Hier ein Ausschnitt meiner .xls Datei
Code:
<xsl:template match="/"> <table width="90%" style="border:2px solid black;"> <xsl:for-each select="/Files/Filename"> <xsl:variable name="filename" select="string(.)"/> <xsl:for-each select="document($filename)"> <tr> <xsl:variable name="AnzCritErr" select="count(//Issue[@Level='CriticalError'])"></xsl:variable> <xsl:variable name="AnzErr" select="count(//Issue[@Level='Error'])"></xsl:variable> <xsl:variable name="AnzCritWar" select="count(//Issue[@Level='CriticalWarning'])"></xsl:variable> <xsl:variable name="AnzWar" select="count(//Issue[@Level='Warning'])"></xsl:variable> <!--Filename--> <td> <font face="Tahoma" size="-1"> <xsl:value-of select="//Module/@Name"/> </font> </td>
Kann man in einem Document "//" nicht verwenden?
Bitte beachten: Absolute Angabe mit zB: "Targets/Target/Modules/Module/Messages/Message" wäre möglich, jedoch werden nicht ALLE Issues gefunden, da unter "Namespaces/Namespace/Messages/Message" sich auch noch welche befinden, das XML-File ist also anscheinend schlecht strukturiert...
Kann mir jemand weiterhelfen?
LG
Chri
Comment