我有以下xml文件类型并使用xslt-template我尝试创建一个html-Report:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<testmodule >
<testgroup>
<testgroup>
<testcase >
<teststep result="pass">=>
<CRID Name="Cleese" CR-ID="CR#1234" TimeStamp="20150520 0122" Backcolor="White" />
</teststep>
<teststep result="pass">=>:
<CRID Name="Cleese" CR-ID="CR#123" TimeStamp="20150520 0122" Backcolor="White" />
</teststep>
<verdict time="" timestamp="" endtime="" endtimestamp="" result="pass" />
<ident>Testcase1</ident>
<CRID Name="Cleese" CR-ID="CR#123" TimeStamp="20150520 0123" Backcolor="White" />
</testcase>
<testcase >
<teststep result="pass">
<CRID Name="Cleese" CR-ID="CR#1234" TimeStamp="20150520 0123" Backcolor="White" />
</teststep>
<teststep result="pass">=>
<CRID Name="Cleese" CR-ID="CR#1234" TimeStamp="20150520 0123" Backcolor="White" />
</teststep>
<teststep result="pass">=>
<CRID Name="Cleese" CR-ID="CR#1234" TimeStamp="20150520 0122" Backcolor="White" />
</teststep>
<verdict result="pass" />
<ident>Testcase2</ident>
<CRID Name="Cleese" CR-ID="CR#1234" TimeStamp="20150520 0123" Backcolor="White" />
</testcase>
<testcase >
<testlogfile file="" />
<teststep result="pass">=> Result:
<CRID Name="Cleese" CR-ID="CR#123" TimeStamp="20150520 0123" Backcolor="White" />
</teststep>
<verdict result="pass" />
<ident>Testcase3</ident>
<CRID Name="Cleese" CR-ID="CR#1234" TimeStamp="20150520 0123" Backcolor="White" />
</testcase>
<title>1.3 Group</title>
</testgroup>
<title>1. Group</title>
</testgroup>
<verdict time="" timestamp="" endtime="" endtimestamp="" result="pass" />
<title>Testmodul</title>
</testmodule>
我想要实现的是在html文件中删除具有CR-ID属性的重复条目。我尝试使用&#34; Muenchian方法&#34;但实际上却失败了。
所以我看到了另一个代码片段,并尝试调整它,但它不起作用。它删除了所有重复项,但我只想删除每个测试用例的副本。 这是.xslt-Template的一部分:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="testcase" mode="overview">
<xsl:for-each select="descendant::CRID[not(@CR-ID=preceding::CRID/@CR-ID)]">
<xsl:if test="@CR-ID !=''">
<xsl:element name="br"/>
<xsl:value-of select="@CR-ID" />
</xsl:if>
</xsl:for-each>
</xsl:template>
我遇到的问题是属性&#34; CR-ID&#34;可以在&#34; teststep&#34;或者在&#34; testcase&#34;。所以有些条目被删除了。
想要的输出只是在我的html中给我以下条目:
Html代码应该像:
<td>1.1.1</td>
<td >Testcase1</td>
<td ><br>CR#1234<br>CR#123</td>
<td>-</td>
</tr>
<tr>
<td >1.1.2</td>
<td >Testcase2</td>
<td ><br>CR#1234</td>
<td >-</td>
</tr>
<tr>
<td >1.1.3</td>
<td >Testcase3</td>
<td ><br>CR#1234<br>CR#123</td>
<td ">-</td>
&#34; CR#1234&#34;和&#34; CR#123&#34;从xml文件中使用。使用我发布的xslt代码,只有testcase1获得CR#,其他为空/空。
任何人都可以帮助我吗?
答案 0 :(得分:0)
使用Muenchian分组,您需要使用属性连接ident:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:key name="group" match="testcase//CRID" use="concat(ancestor::testcase/ident, '|', @CR-ID)"/>
<xsl:template match="/">
<html>
<head>
<title>Example</title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="root">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<xsl:template match="testcase">
<li>
<xsl:value-of select="concat(ident, ': ')"/>
<xsl:apply-templates select=".//CRID[generate-id() = generate-id(key('group', concat(ancestor::testcase/ident, '|', @CR-ID))[1])]"/>
</li>
</xsl:template>
<xsl:template match="CRID">
<xsl:if test="position() > 1">, </xsl:if>
<xsl:value-of select="@CR-ID"/>
</xsl:template>
</xsl:transform>
改变
<root>
<testcase>
<teststep>
<CRID Name="Cleese" CR-ID="CR#1234"/>
</teststep>
<teststep>
<CRID Name="Cleese" CR-ID="CR#123"/>
</teststep>
<teststep>
<CRID Name="Cleese" CR-ID="CR#1234"/>
</teststep>
<ident>Testcase1</ident>
</testcase>
<testcase>
<teststep>
<CRID Name="Cleese" CR-ID="CR#1234"/>
</teststep>
<teststep>
<CRID Name="Cleese" CR-ID="CR#123"/>
</teststep>
<CRID Name="Cleese" CR-ID="CR#1234"/>
<ident>Testcase2</ident>
</testcase>
<testcase>
<teststep>
<CRID Name="Cleese" CR-ID="CR#1234"/>
</teststep>
<teststep>
<CRID Name="Cleese" CR-ID="CR#123"/>
</teststep>
<teststep>
<CRID Name="Cleese" CR-ID="CR#1234"/>
</teststep>
<CRID Name="Cleese" CR-ID="CR#123"/>
<ident>Testcase3</ident>
</testcase>
</root>
到
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Example</title>
</head>
<body>
<ul>
<li>Testcase1: CR#1234, CR#123</li>
<li>Testcase2: CR#1234, CR#123</li>
<li>Testcase3: CR#1234, CR#123</li>
</ul>
</body>
</html>