提问人:Krishan Gopal 提问时间:6/8/2023 最后编辑:Krishan Gopal 更新时间:6/8/2023 访问量:34
将 XML 属性的值追加到同一文件中另一个属性的值
Append value of XML attribute to value of Another attribute in same file
问:
使用以下 xml 文件给出
<testsuites>
<testsuite><testcase name="case 1" ><failure type="ERROR">Hello</failure></testcase></testsuite>
<testsuite><testcase name="case 2" ><failure type="WARNING">Buddy</failure></testcase></testsuite>
</testsuites>
我想将失败类型值附加到测试用例的名称中。因此,上述 xml 中的失败值为“ERROR”,测试用例的名称为“Case 1”,结果名称为“[ERROR] Case 1”。我想通过所有测试用例的 shell 脚本来做到这一点。
注意:同一文件中可以有多个具有不同故障类型的测试用例。
所需的目标 XML 文档是
<testsuites>
<testsuite><testcase name="[ERROR] case 1" ><failure type="ERROR">Hello</failure></testcase></testsuite>
<testsuite><testcase name="[WARNING] case 2" ><failure type="WARNING">Buddy</failure></testcase></testsuite>
</testsuites>
到目前为止,我尝试的是基于目标 XML 创建 XSLT 文档并使用该 XSLT 生成目标 XML,但直到现在我都无法实现这一点。
我的 XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<testsuites>
<xsl:for-each select="/testsuites/testsuite">
<testsuite>
<xsl:for-each select="./testcase">
<testcase>
<xsl:variable name="name" select="./@name"/>
<!-- The variable name can be used for further processing. -->
<xsl:attribute name="name"><xsl:value-of select="$name"/></xsl:attribute>
<failure>
<xsl:value-of select="./failure"/>
<xsl:variable name="type" select="./failure/@type"/>
<!-- The variable type can be used for further processing. -->
<xsl:attribute name="type"><xsl:value-of select="$type"/></xsl:attribute>
</failure>
</testcase>
</xsl:for-each>
</testsuite>
</xsl:for-each>
</testsuites>
</xsl:template>
</xsl:stylesheet>
答:
1赞
y.arazim
6/8/2023
#1
我想将失败类型值附加到测试用例的名称中。
应该很简单:
<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="testcase/@name">
<xsl:attribute name="name">
<xsl:text>[</xsl:text>
<xsl:value-of select="../failure/@type" />
<xsl:text>] </xsl:text>
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
评论
0赞
Krishan Gopal
6/8/2023
这很神奇,您能否为以下原始 xml 编写类似的 xsl<testsuites disabled=“0” errors=“0” failures=“7” tests=“7” time=“0.0”> <testsuite disabled=“0” errors=“0” failures=“7” name=“semgrep results” skipped=“0” tests=“7” time=“0”> <testcase name=“generic.secrets.security.detected-etc-shadow.detected-etc-shadow” classname=“selftest/secrets/bad-secrets.txt” file=“selftest/secrets/bad-secrets.txt” line=“1”> <failure type=”ERROR“ message=”检测到 linux 影子文件“>root::17431:0:99999:7::: </failure> </testcase> </testsuites> </testsuites>
0赞
y.arazim
6/9/2023
对不起,我看不出这有什么不同。在我看来,相同的样式表可以用来产生类似的结果。如果没有,并且您无法自己进行必要的更改,请将其作为新问题发布。
评论