如何解决在 schematron 中使用 for-each 循环
我是自学成才,所以我提前为我所有的错误道歉。
我的 xml 包含 50 个 testwithstate 元素,每个元素都包含一个 ID 属性。我一直无法运行 for-each 循环,我试图创建一个尽可能简单的测试来找出我的错误,但没有成功。我的代码如下。在此先感谢您提供的任何帮助。
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://purl.oclc.org/dsdl/schematron" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" queryBinding="xslt2" xmlns:sqf="http://www.schematron-quickfix.com/validator/process">
<ns uri="http://www.w3.org/1999/xlink" prefix="xlink"/>
<ns prefix="xs" uri="http://www.w3.org/2001/XMLSchema"/>
<pattern>
<rule context="testwithstate">
<xsl:for-each select="/@id">
<report test="1=1">It ran.</report>
</xsl:for-each>
</rule>
</pattern>
</schema>
解决方法
我在 schematron 中写了很多,当我需要高级 xsl 代码来运行时,我将它分开来运行,这样你就可以充分利用两者。我给你举个例子。 这段代码对你来说可能没有多大意义,它是一个片段,但它向你展示了一种混合 schematron 和 xslt 的方法:
<?xml version="1.0" encoding="UTF-8"?>
<sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<sch:pattern id="TPOD0470" is-a="abstractPatternWarning">
<sch:param name="CONDITION" value="string-length(foo:foutenTPOD_0470(.)[1]) = 0"/>
</sch:pattern>
<xsl:function name="foo:foutenTPOD_0470">
<xsl:param name="context" as="node()"/>
<xsl:for-each select="$context/../tekst:Titel">
<xsl:if test="$context/@eId=@eId and not(starts-with(tekst:Kop/tekst:Nummer,concat($context/../tekst:Kop/tekst:Nummer,'.')))">
<xsl:value-of select="@eId"/>
</xsl:if>
</xsl:for-each>
</xsl:function>
</sch:schema>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。