通过xslt 1.0检查xml节点中元素的顺序是否正确



我正在通过xslt 1.0和x-path 1.0寻找解决方案。

下面是一个示例xml文件:

<header>
<number>123</number>
<text>test string</text>
</header>

数字和文本都是头节点的子元素,并且都是该节点中的可选元素。我想通过xslt 1.0检查文本元素是在数字元素之后,还是在数字元素不存在的情况下只是头节点的子节点。若文本元素不存在,那个么数字元素也适用同样的条件。基本上,我想确保元素应该在正确的位置。可以有更多具有相同sceraios的子元素。我知道XSD可以做到这一点,但我想在xslt1.0中添加这样的检查。我还没有做任何事。请建议我们是否可以通过xslt 1.0 做到这一点

提前谢谢。

您的问题有点开放,但让我们将其解释为您希望根据内容模型验证子序列

A?BCDE

有一种方法:

<xsl:template match="header">
  <xsl:apply-templates select="*" mode="v"/>
</xsl:template>
<xsl:template match="A" mode="v">
  <xsl:if test="preceding::sibling::*"><error/></xsl:if>
</xsl:template>
<xsl:template match="B" mode="v">
  <xsl:variable name="p" select="preceding-sibling::*[1]"/>
  <xsl:if test="$p and not(name($p) = 'A')"><error/></xsl:if>
</xsl:template>
<xsl:template match="C" mode="v">
  <xsl:variable name="p" select="preceding-sibling::*[1]"/>
  <xsl:if test="$p and not(name($p) = 'A' or name($p) = 'B')"><error/></xsl:if>
</xsl:template>

等等。

相关内容

  • 没有找到相关文章

最新更新