У меня есть следующий вывод из JUnit:
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="Some Collection" tests="13" time="1.174">
<testsuite name="Request 1"/>
<testsuite name="Request 2">
<testcase name="Status code is 200" time="0.083"/>
</testsuite>
<testsuite name="Request 3">
<testcase name="Status code is 200" time="0.056"/>
<testcase name="Validation message is triggered" time="0.056"/>
</testsuite>
<testsuites>
В этом случае testsuites
- мой корневой элемент.Чтобы правильно преобразовать его в JSON, мне нужно добавить следующий атрибут к элементам testsuite
и testcase
: json:Array="true"
, я делаю это с XSL:
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:json="http://james.newtonking.com/projects/json">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//testsuite">
<xsl:copy>
<xsl:attribute name="json:Array">true</xsl:attribute>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="//testcase">
<xsl:copy>
<xsl:attribute name="json:Array">true</xsl:attribute>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:transform>
Это приводит кследующий (действительный) xml:
<testsuites name="Some Collection" tests="13" time="1.174">
<testsuite xmlns:json="http://james.newtonking.com/projects/json" json:Array="true" name="Request 1"/>
<testsuite xmlns:json="http://james.newtonking.com/projects/json" json:Array="true" name="Request 2">
<testcase xmlns:json="http://james.newtonking.com/projects/json" json:Array="true" name="Status code is 200" time="0.083"/>
</testsuite>
<testsuite xmlns:json="http://james.newtonking.com/projects/json" json:Array="true" name="Request 3">
<testcase xmlns:json="http://james.newtonking.com/projects/json" json:Array="true" name="Status code is 200" time="0.056"/>
<testcase xmlns:json="http://james.newtonking.com/projects/json" json:Array="true" name="Validation message is triggered" time="0.056"/>
</testsuite>
<testsuites>
, но я действительно хочу, чтобы пространство имен было перемещено в корневой элемент, чтобы его можно было использовать в дочерних элементах:
<testsuites xmlns:json="http://james.newtonking.com/projects/json" name="Some Collection" tests="13" time="1.174">
<testsuite json:Array="true" name="Request 1"/>
<testsuite json:Array="true" name="Request 2">
<testcase json:Array="true" name="Status code is 200" time="0.083"/>
</testsuite>
<testsuite json:Array="true" name="Request 3">
<testcase json:Array="true" name="Status code is 200" time="0.056"/>
<testcase json:Array="true" name="Validation message is triggered" time="0.056"/>
</testsuite>
<testsuites>
Как я могудобиться этого с помощью XSLT?