【发布时间】:2020-10-18 11:53:04
【问题描述】:
我正在将数学公式从一种专有格式转换为另一种格式。主要问题是原始格式按元素出现的顺序列出元素,其中目标格式使用严格内容 MathML 的逻辑定义(但根本不一样——在这种情况下甚至不是 XML)。
以下公式:
<FORMULA>
<EXPR>A</EXPR>
<OP.CMP TYPE="EQ"/>
<EXPR>B</EXPR>
<OP.CMP TYPE="EQ"/>
<EXPR>C</EXPR>
</FORMULA>
会变成:
equal[char[A],char[B],char[C]]
这相当简单,但是当第二个 OP.CMP 的 TYPE 与第一个不同时,它会改变:
<FORMULA>
<EXPR>A</EXPR>
<OP.CMP TYPE="EQ"/>
<EXPR>B</EXPR>
<OP.CMP TYPE="NE"/>
<EXPR>C</EXPR>
</FORMULA>
变成:
equal[char[A],notequal[char[B],char[C]]]
由于每个级别中有许多嵌套级别,我需要首先使用运算符 OP.CMP 和 OP.MATH 作为组边界对元素进行分组来处理公式。然后我会选择 OP.CMP 或 OP.MATH 的类型来启动该组。但是当我使用以 OP.CMP 或 OP.MATH 结尾的 xml:for-each-group 时,我没有找到该组中包含的 OP.CMP 或 OP.MATH,这是我所期望的。这是我的简单测试 XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:template match="FORMULA" mode="eqn">
<xsl:for-each-group select="node()" group-ending-with="OP.CMP">
<xsl:message>Group <GRP><xsl:copy-of select="."/></GRP></xsl:message>
</xsl:for-each-group>
</xsl:template>
我得到的是这样的:
组
组
组
我期待的地方:
组
组
组
结束组的元素是否不包含在该组中?如果是这样,我应该用其他东西代替吗?
【问题讨论】:
标签: xslt xslt-2.0 xslt-grouping