xslt скопировать значение узла в другую переменную узла - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь написать таблицу стилей xslt, чтобы сделать стандартный отчет о Junit читаемым через jenkins.У меня есть этот файл отчета:

<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="Test.postman.OpenWeather.01" tests="2" time="0.368">
  <testsuite name="getRandomCityById" id="a3fd8f91-a116-434b-9717-d40d61a03b59" timestamp="2019-02-06T11:28:55.732Z" classname="getRandomCityById" tests="1" failures="0" errors="0" time="0.252">
    <testcase name="Status code is 200" time="0.252"/>
  </testsuite>
  <testsuite name="getCityByName" id="4b65811e-9f86-48fb-904d-6eb9c8094b68" timestamp="2019-02-06T11:28:55.732Z" classname="getCityByName" tests="3" failures="0" errors="0" time="0.116">
    <testcase name="City Name matches Request'" time="0.116"/>
    <testcase name="Contains object: 'weather'" time="0.116"/>
    <testcase name="DOES NOT Contain string: 'snow' " time="0.116"/>
  </testsuite>
</testsuites>

, но мой вывод должен быть таким:

<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="Test.postman.OpenWeather.01" tests="2" time="0.368">
  <testsuite name="getRandomCityById" id="a3fd8f91-a116-434b-9717-d40d61a03b59" timestamp="2019-02-06T11:28:55.732Z" classname="Test.postman.OpenWeather.01" tests="1" failures="0" errors="0" time="0.252">
    <testcase name="Status code is 200" time="0.252"/>
  </testsuite>
  <testsuite name="getCityByName" id="4b65811e-9f86-48fb-904d-6eb9c8094b68" timestamp="2019-02-06T11:28:55.732Z" classname="Test.postman.OpenWeather.01" tests="3" failures="0" errors="0" time="0.116">
    <testcase name="City Name matches Request'" time="0.116"/>
    <testcase name="Contains object: 'weather'" time="0.116"/>
    <testcase name="DOES NOT Contain string: 'snow' " time="0.116"/>
  </testsuite>
</testsuites>

Во всех именах классов testsuite мне нужно имя testuites (Test.postman.OpenWeather.01)

Я не могу написать xslt, кто-то может мне помочь, пожалуйста?Заранее спасибо

1 Ответ

0 голосов
/ 06 февраля 2019

Если данный XML является вашим входным файлом, то результат может быть достигнут в XSLT 1.0 следующим образом:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>

<xsl:template match="testsuite">
    <xsl:copy>
        <xsl:attribute name="classname">
          <xsl:value-of select="ancestor::node()/@name" />
       </xsl:attribute>
        <xsl:for-each select="@*">
            <xsl:if test="name() != 'classname'">
                <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>
            </xsl:if>
        </xsl:for-each>
        <xsl:apply-templates select="node()" />
    </xsl:copy>
</xsl:template>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...