关于ZAKER 融媒体解决方案 合作 加入

xml- 减少 XSLT 1.0 中的重复表达式

CocoaChina 11-11

我有以下XML ( 简化 ) :

<?xml version="1.0" encoding="utf-8"?><TestCases> <TestCase> <Name>Test1</Name> <Result>Failed</Result> <Properties> <Type>Type1</Type> </Properties> </TestCase> <TestCase> <Name>Test1</Name> <Result>Failed</Result> <Properties> <Type>Type2</Type> </Properties> </TestCase> <TestCase> <Name>Test1</Name> <Result>Passed</Result> <Properties> <Type>Type1</Type> </Properties> </TestCase></TestCases>

我有兴趣创建一个表 , 根据其类型对通过 / 失败的测试用例进行计数 , 如下所示:

通过 ( Type1 ) :1

失败 ( 类型 1 ) :1

通过 ( 其他类型 ) :0

失败 ( 其他类型 ) :1

为此 , 我正在编写以下查询:

<xsl:value-of select="count ( //TestCase [ Result = 'Passed' and count ( Properties/TestType='Type1' ) >0 ] ) "/><xsl:value-of select="count ( //TestCase [ Result = 'Failed' and count ( Properties/TestType='Type1' ) >0 ] ) "/><xsl:value-of select="count ( //TestCase [ Result = 'Passed' and count ( Properties/TestType='Type1' ) =0 ] ) "/><xsl:value-of select="count ( //TestCase [ Result = 'Failed' and count ( Properties/TestType='Type1' ) =0 ] ) "/>

如您所见 , 这里有很多重复代码 , 如果我可以节省一些的话 , 那会很棒 . 我了解在 XSL 2.0 中可以使用用户功能 , 但是在 XSL 1.0 中应该怎么做?您是否看到可以优化重复表达式的任何选项?

P.S 请注意 , 这是实数的简化 , 尽管此处的表达式似乎并不长 , 但在实数代码中 , 它的长度相当长 , 因此需求确实很实在 .

谢谢!

最佳答案

尝试:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="byType" match="Properties/Type" use="."/> <xsl:template match="text ( ) " /> <xsl:template match="Type [ count ( .|key ( 'byType',. ) [ 1 ] ) =1 ] "> <xsl:value-of select="concat ( ' Passed ( ',.,' ) : ', count ( key ( 'byType',. ) [ ../../Result='Passed' ] ) , ' Failed ( ',.,' ) : ', count ( key ( 'byType',. ) [ ../../Result='Failed' ] ) ) " /> </xsl:template> </xsl:stylesheet>

你会得到:

Passed ( Type1 ) : 1 Failed ( Type1 ) : 1 Passed ( Type2 ) : 0 Failed ( Type2 ) : 1

编辑:不那么冗长 .

以上内容由"CocoaChina"上传发布 查看原文
相关标签 重复

觉得文章不错,微信扫描分享好友

扫码分享