新手:XSLT 转换以验证 XML 文档中的规则 [英] Newbie: XSLT Transformation to validate rules in XML document
问题描述
我是 XSLT 的新手.我有一个 XML 文档,我需要使用 xslt 来验证 XML 文档中的某些规则.XML 和 xsl 文件将在 xsltproc 工具中使用,输出将是一个简单的通过或失败.
I'm a newbie to XSLT. I've an XML document and I need to come up with xslt to validate certain rules in the XML document. The XML and xsl file will be used in xsltproc tool and the output will be a simple Pass or Fail.
示例 XML:
...
<Manager mincount="4" grade="10"...>
<Employee id="1" grade="9" .... />
<Employee id="2" grade="8" .... />
.....
</Manager>
- Manager 下的子代数(本例中为 Employee)必须等于或大于 mincount 属性的值.
- 所有员工的等级必须低于经理等级.
感谢您的帮助!TIA!
Appreciate your help! TIA!
推荐答案
这是一个 XSLT 1.0 选项,它给出了通过/失败.失败"中还有其他详细信息,但可以将其删除.它还将消息输出到 stdout 和 stderr 并终止处理.
Here's an XSLT 1.0 option that gives a pass/fail. There is additional detail in the "Fail", but that can be removed. It also outputs the message to both stdout and stderr and terminates processing.
<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/输出示例:
Here are a few XML/output examples:
<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).
这篇关于新手:XSLT 转换以验证 XML 文档中的规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!