使用xslt

时间:2016-08-07 12:20:44

标签: xml xslt

我从JUnit测试报告导入xml文件,并使用xslt对其应用一些CSS样式。我试图解决的问题是如何获得正确的换行符,就像我在文本编辑器中对其进行竞争而不是仅通过浏览器窗口的宽度打破的长行文本。截至目前,我使用的xslt代码看起来像这样。

<xsl:for-each select="testsuite/testcase">
      <div class="testsuit">
          <div class="testcase">
               <h3>
                   <xsl:value-of select="@name"/>
                </h3>
                <div class="result">
                    <xsl:value-of select="system-out"/>
                </div>
            </div>
       </div>
</xsl:for-each>

xml的示例如下所示

<testsuite errors="0" failures="0" name="testsuite" skipped="0" tests="7">
    <testcase name="foo-bar2_1" time="3.6">
        <system-out># ** lorem_ipsum = 0 # Time: 0 ps  Iteration: 0  Instance: /foo_bar_004 # ** Note: lorem_ips: generic FOOBAR_FILTER = 0 # Time: 0 ps  Iteration: 0  Instance: /foo_bar_004# ** Note: foo_bar_001: generic IPSUM_DESCRIPTORS = 0 # Time: 0 ps  Iteration: 0
        </system-out>
    </testcase>
</testsuit>

我想在每个'#'之前添加换行符,使浏览器正确显示文本。

#** lorem_ipsum = 0
#Time:0 ps迭代次数:0实例:/ foo_bar_004
#**注意:lorem_ips:泛型FOOBAR_FILTER = 0
#Time:0 ps迭代次数:0实例:/ foo_bar_004
#**注意:foo_bar_001:通用IPSUM_DESCRIPTORS = 0
#Time:0 ps Iteration:0

1 个答案:

答案 0 :(得分:0)

使用XSLT 2.0我建议使用analyze-string

<xsl:template match="/">
    <xsl:for-each select="testsuite/testcase">
          <div class="testsuit">
              <div class="testcase">
                   <h3>
                       <xsl:value-of select="@name"/>
                    </h3>
                    <ul class="result">
                        <xsl:analyze-string select="system-out" regex="#[^#]*">
                            <xsl:matching-substring>
                                <li>
                                    <xsl:value-of select="."/>
                                </li>
                            </xsl:matching-substring>
                        </xsl:analyze-string>
                    </ul>
                </div>
           </div>
    </xsl:for-each>
</xsl:template>