0

我使用 xspec 来测试样式表。大多数情况下它运行良好,但有时测试会在没有正当理由的情况下失败:预期结果和实际结果是相同的。表面上看:比较屏幕中的一切都是绿色的。在那种情况下,我在尝试了各种各样的事情后大多让它再次工作,但不知道“做了什么改变”​​。

如果 xspec 会报告失败的原因,那将是最有帮助的,但如果您能帮助我(而不是 xspec 输出)对此有所了解,我会非常高兴。

这是一个简化的测试用例:xsl:

<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:uc="http://www.infinity-loop.de/namespace/upcast/4.0/"
  xmlns:xlink="http://www.w3.org/1999/xlink" 
  xmlns:html="http://www.w3.org/HTML/1998/html4"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="uc xlink html xs xsl">

  <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

  <xsl:template match="bezwaar">
    <xsl:variable name="content">
      <xsl:element name="{name()}">
        <xsl:apply-templates select="@*|node()"/>
      </xsl:element>
    </xsl:variable>
    <xsl:copy-of select="$content"/>
  </xsl:template>

  <xsl:template match="@*" >
    <xsl:attribute name="{name()}" namespace="{namespace-uri()}">
      <xsl:value-of select="." />
    </xsl:attribute>
  </xsl:template>

  <xsl:template match="*">
    <xsl:element name="{name()}" namespace="{namespace-uri()}">
      <xsl:apply-templates select="@*|node()" />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

规格:

<?xml version="1.0" encoding="UTF-8"?>
<x:description
    xmlns:x = "http://www.jenitennison.com/xslt/xspec"
    stylesheet="file:/home/rdgon/project/kraak/kraak-xslt/publicatiebladen/staatscourant/stcrt_step2.xsl">
  <x:param name='ns' select="false()"/>

  <x:scenario label='test'>
    <x:scenario label='werkt dit'>
      <x:context><bezwaar>
          <al>Noem in het bezwaarschrift:</al>
          <al nadruk="cur">Vergeet niet te ondertekenen.</al>
        </bezwaar>
      </x:context>
      <x:expect>
        <bezwaar>
          <al>Noem in het bezwaarschrift:</al>
        <al nadruk="cur">Vergeet niet te ondertekenen.</al>
      </bezwaar>
    </x:expect>
    </x:scenario>
  </x:scenario>
</x:description>

测试报告显示失败: 测试报告

你能解释一下我没有看到什么吗?

路德

4

2 回答 2

2

因为xsl:variable没有@as,所以你的结果是一个文档节点。但是您x:expect需要一个元素。

如果你想让你x:expect期望一个文档节点,你需要添加select="/"x:expect. 在 XSpec Wiki中查找“如果您不指定 @select”的解释。

于 2019-11-14T14:19:19.140 回答
0

如果您已经运行了 XSL,那么bezwaar元素会出现 2 次并出现额外的命名空间,因为您在同一个元素中有x:contextx:expect 。如果您想x:expect与x:context相同,那么您可以尝试此代码。

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x = "http://www.jenitennison.com/xslt/xspec"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs x">

<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="x:scenario">
    <xsl:apply-templates select="x:scenario/x:context/bezwaar"/>
</xsl:template>
<xsl:template match="bezwaar">
    <xsl:element name="{local-name()}">
        <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
</xsl:template>
<xsl:template match="al">
    <xsl:element name="{local-name()}">
        <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
</xsl:template>
<xsl:template match="@*">
    <xsl:attribute name="{local-name(.)}">
        <xsl:value-of select="."/>
    </xsl:attribute>
</xsl:template>

或者如果您想要多次使用 bezwaar,那么您可以评论第一个模板匹配。

于 2019-11-14T13:44:29.260 回答