Мы используем CruiseControl для нашего сервера сборки.Он компилирует наши приложения с использованием MSBuild и использует собственный XML-регистратор, который выдает что-то вроде следующего XML:
<project name="CI">
<target name="CompileApp">
<project name="Project1.csproj">
<target name="build">
<error>Compilation error one!</error>
</target>
<target name="BeforeBuild">
<project name="Project2.csproj">
<target name="build">
<error>Compilation error two!</error>
</target>
</project>
</target>
</project>
</target>
</project>
Я хочу преобразовать это в отчет, который выводит ошибки каждого проекта.Я не хочу сообщать об ошибках в других проектах.
Project "Project1.csproj": 1 error(s)
Error(s):
Compilation error one!
Project "Project2.csproj": 1 error(s)
Error(s):
Compilation error two!
Это самое близкое, что я получил, но это не правильно.Он не отфильтровывает ошибки project2 при отображении ошибок project1.
<xsl:template>
<xsl:variable select="//project[.//error]" name="projects.with.errors" />
<xsl:apply-templates select="$projects.with.errors" />
</xsl:template>
<xsl:template match="project">
<xsl:variable select="./*[not(project)]//error" name="errors" />
<xsl:if test="count($errors) > 1">
<!-- display errors -->
</xsl:if>
</xsl:template>
Как отфильтровать все узлы ошибок, у которых есть предок проекта, отличный от моего текущего узла проекта?Т.е. как я могу выбрать только потомки с ошибочными узлами, у которых нет предка проекта?
Узлы с ошибками могут иметь произвольное количество родительских элементов (обычно, но не всегда).