我是XSLT的新手.
我有一个 XML文档,我需要提出xslt来验证XML文档中的某些规则. XML和xsl文件将在xsltproc工具中使用,输出将是简单的Pass或Fail.
我有一个 XML文档,我需要提出xslt来验证XML文档中的某些规则. XML和xsl文件将在xsltproc工具中使用,输出将是简单的Pass或Fail.
示例XML:
…
<Manager mincount="4" grade="10"...> <Employee id="1" grade="9" .... /> <Employee id="2" grade="8" .... /> ..... </Manager>
> Manager下的子项数(本例中为Employee)必须等于或大于mincount属性的值.
>所有员工的成绩必须低于经理级.
感谢您的帮助!
TIA!
解决方法
这是一个提供通过/失败的XSLT 1.0选项. “失败”中还有其他详细信息,但可以删除.它还将消息输出到stdout和stderr并终止处理.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="/Manager"> <xsl:if test="not(count(Employee) >= @mincount)"> <xsl:variable name="vMessage" select="concat('Fail - Number of Employees (',count(Employee),') is not >= to @mincount (',@mincount,').')"/> <!--stdout--> <xsl:value-of select="$vMessage" disable-output-escaping="yes"/> <!--stderr--> <xsl:message terminate="yes"><xsl:value-of select="$vMessage"/></xsl:message> </xsl:if> <xsl:if test="Employee/@grade >= @grade"> <xsl:variable name="vMessage" select="concat('Fail - Employee (id ',Employee[@grade >= ancestor::Manager/@grade][1]/@id,') has a grade (',Employee[@grade >= ancestor::Manager/@grade][1]/@grade,') that is higher than the Manager grade (',@grade,').')"/> <!--stdout--> <xsl:value-of select="$vMessage" disable-output-escaping="yes"/> <!--stderr--> <xsl:message terminate="yes"><xsl:value-of select="$vMessage"/></xsl:message> </xsl:if> <xsl:text>Pass</xsl:text> </xsl:template> </xsl:stylesheet>
以下是一些XML /输出示例:
<Manager mincount="1" grade="7" id="28"> <Employee id="6" grade="5"/> <Employee id="7" grade="1"/> <Employee id="8" grade="2"/> <Employee id="3" grade="7"/> </Manager> Fail - Employee (id 3) has a grade (7) that is higher than the Manager grade (7).
<Manager mincount="1" grade="7" id="28"> <Employee id="6" grade="5"/> <Employee id="7" grade="1"/> <Employee id="8" grade="2"/> <Employee id="3" grade="6"/> </Manager> Pass
<Manager mincount="10" grade="7" id="28"> <Employee id="6" grade="5"/> <Employee id="7" grade="1"/> <Employee id="8" grade="2"/> <Employee id="3" grade="6"/> </Manager> Fail - Number of Employees (4) is not >= to @mincount (10).