2016-09-16 2 views
0

У меня есть XML для тестовых примеров.Получить количество узлов из XML-теста с использованием XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<TestResultArray xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <TestResult> 
     <Name>Test1</Name> 
     <Date>9/15/2016</Date> 
     <Time>4:09 PM</Time> 
     <Id>697</Id> 
     <Steps> 
     <TestStep> 
      <Number>2</Number> 
      <Status>PASS</Status> 
     </TestStep> 
     <TestStep> 
      <Number>3</Number> 
      <Status>PASS</Status> 
     </TestStep> 
     <TestStep> 
      <Number>4</Number> 
      <Status>PASS</Status> 
     </TestStep> 
     </Steps> 
    </TestResult> 
    <TestResult> 
     <Name>Test2</Name> 
     <Date>9/15/2016</Date> 
     <Time>4:09 PM</Time> 
     <Id>697</Id> 
     <Steps> 
     <TestStep> 
      <Number>2</Number> 
      <Status>FAIL</Status> 
     </TestStep> 
     <TestStep> 
      <Number>3</Number> 
      <Status>PASS</Status> 
     </TestStep> 
     <TestStep> 
      <Number>4</Number> 
      <Status>PASS</Status> 
     </TestStep> 
     </Steps> 
    </TestResult> 
    <TestResult> 
     <Name>Test3</Name> 
     <Date>9/15/2016</Date> 
     <Time>4:09 PM</Time> 
     <Id>697</Id> 
     <Steps> 
     <TestStep> 
      <Number>2</Number> 
      <Status>FAIL</Status> 
     </TestStep> 
     <TestStep> 
      <Number>3</Number> 
      <Status>FAIL</Status> 
     </TestStep> 
     <TestStep> 
      <Number>4</Number> 
      <Status>FAIL</Status> 
     </TestStep> 
     </Steps> 
    </TestResult> 
</TestResultArray> 

Я пытаюсь получить общее количество тестовых примеров, количество пройденных и количество неудавшихся тестовых случаев.

Требование: если какой-либо из <TestStep> НЕИСПРАВНОСТИ, весь тестовый пример <TestResult> следует считать FAIL.

Я могу получить общее количество теста с

<tr> 
<td> <xsl:value-of select="count(TestResultArray/TestResult)" /> </td> 
</tr> 

Как я могу получить общее количество пройденного и проваленого тест <TestResult> (не <TestStep>) с использованием XSLT?

Для приведенного выше примера XML вывод должен быть

Total Testcase = 3, 
Passed = 1, 
Failed = 2 

ответ

1

Вот один из возможных решений:

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
    <xsl:output method="text" /> 

    <xsl:template match="/*"> 
    <xsl:text>Total Testcase = </xsl:text> 
    <xsl:value-of select="count(*)"/> 
    <xsl:text>,&#xa;</xsl:text> 
    <xsl:text>Passed = </xsl:text> 
    <xsl:value-of select="count(*[not(Steps/*/Status = 'FAIL')])"/> 
    <xsl:text>,&#xa;</xsl:text> 
    <xsl:text>Failed = </xsl:text> 
    <xsl:value-of select="count(*[Steps/*/Status = 'FAIL'])"/> 
    <xsl:text>&#xa;</xsl:text> 
    </xsl:template> 

</xsl:stylesheet> 

При запуске на исходном XML, следующий результат получается:

Total Testcase = 3, 
Passed = 1, 
Failed = 2 
+0

Это именно то, что я хотел. Спасибо :) – John

+0

Вы ставите! Рад помочь. – ABach

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