Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt xspec:预期失败,结果相同_Xslt_Xspec - Fatal编程技术网

Xslt xspec:预期失败,结果相同

Xslt xspec:预期失败,结果相同,xslt,xspec,Xslt,Xspec,我使用xspec测试样式表。大多数情况下,它工作正常,但偶尔测试会在没有正当理由的情况下失败:预期结果和实际结果是相同的。看起来:在比较屏幕中,一切都是绿色的。 在这种情况下,我在尝试了各种各样的事情后,基本上都能让它重新工作,但不知道“它”发生了什么变化 如果xspec能够报告失败的原因,这将是非常有帮助的,但是如果您能够帮助我(而不是xspec的输出)对此有所了解,我将非常高兴 这是一个简化的测试用例: xsl: xspec: <?xml version="1.0" encodin

我使用xspec测试样式表。大多数情况下,它工作正常,但偶尔测试会在没有正当理由的情况下失败:预期结果和实际结果是相同的。看起来:在比较屏幕中,一切都是绿色的。 在这种情况下,我在尝试了各种各样的事情后,基本上都能让它重新工作,但不知道“它”发生了什么变化

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

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


xspec:

<?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>

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


Ruud

如果您已经运行了XSL,那么bezwaar元素会出现两次,并出现额外的名称空间,因为在同一个元素中有x:contextx:expect。如果希望x:expectx: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则可以对第一个模板匹配进行注释。

如果已运行XSL,则bezwaar元素会出现两次,并出现额外的名称空间,因为在同一元素中有x:contextx:expect。如果希望x:expectx: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,则可以对第一个模板匹配进行注释。

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


如果您想让您的
x:expect
使用文档节点,则需要将
select=“/”
添加到
x:expect
。查找解释“如果您在XSpec中未指定@select”。

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


如果您想让您的
x:expect
使用文档节点,则需要将
select=“/”
添加到
x:expect
。在XSpec中查找“如果您不指定@select”的解释。

结果的类型(
document-node()
)似乎与预期结果的类型(
element()
)不同。但是,我不确定在这个场景中,您必须在哪里进行调整。Martin,我使用了错误的样式表。我已经生成了一个新的最小xsl样式表,它精确地生成了屏幕截图(我编辑了这个问题)。区别在于xslt中使用了一个变量,这显然会导致返回文档节点,从而导致xspec报告失败。现在您可能已经能够解释如何将文档节点转换为元素了。是的,如果我用apply templates替换了的副本,那么测试就通过了。我使用和第二个身份转换用于此模式。似乎是一个有点残废的解决方案。可以更优雅地完成吗?如果
由于在变量
content
中返回文档节点而导致测试失败,那么
当然应该足以返回文档节点中的元素并通过测试。或者将该变量声明为
。谢谢Martin,这正是我想要的。我应该能够接受你的评论作为答案!!结果的类型(
document-node()
)似乎与预期结果的类型(
element()
)不同。但是,我不确定在这个场景中,您必须在哪里进行调整。Martin,我使用了错误的样式表。我已经生成了一个新的最小xsl样式表,它精确地生成了屏幕截图(我编辑了这个问题)。区别在于xslt中使用了一个变量,这显然会导致返回文档节点,从而导致xspec报告失败。现在您可能已经能够解释如何将文档节点转换为元素了。是的,如果我用apply templates替换了的副本,那么测试就通过了。我使用和第二个身份转换用于此模式。似乎是一个有点残废的解决方案。可以更优雅地完成吗?如果
由于在变量
content
中返回文档节点而导致测试失败,那么
当然应该足以返回文档节点中的元素并通过测试。或者将该变量声明为
。谢谢Martin,这正是我想要的。我应该能够接受你的评论作为答案!!谢谢你的回答。我不知道在expect元素上选择的可能性。非常有用!!谢谢你的回答。我不知道在expect元素上选择的可能性。非常有用!!