我正在寻找通过xslt 1.0和x-path 1.0的解决方案。
以下是一个示例xml文件:
<header>
<number>123</number>
<text>test string</text>
</header>
数字和文本都是标题节点的子元素,并且都是此节点中的可选元素。 我想通过xslt 1.0来检查文本元素是否在数字元素之后或者如果数字元素不存在则仅是标题节点的子节点。如果文本元素不存在,则数字元素的条件相同。基本上我想确保元素应该位于正确的位置。可以有更多具有相同sceraios的子元素。我知道XSD可以做到这一点,但我想在xslt 1.0中添加这样的检查。我还没有从我身边做过任何事情。请通过xslt 1.0
建议我们是否可以这样做提前致谢。
答案 0 :(得分:1)
你的问题有点开放,但让我们解释为你想根据内容模型验证孩子的序列
一个? B' C? d? E'
这是一种方式:
<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>
等