我正在通过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>
等等。