将 xml 值计算为等式
evaluate xml value as equation
我正在尝试使用 Xquery、Xpath 或 Xproc 评估作为 xml 标记的值插入的等式 - 简单地说就是纯 XML。我是这里的初学者,但我认为它应该是可行的。为了更好地展示我想要实现的目标,请看这个例子:
<inp>
<data>
<a>5</a>
<b>4</b>
</data>
<eq>
a+b
</eq>
</inp>
现在会有一些魔法...因此我想得到类似的东西:
<res>
9
</res>
你能帮我解决其中的魔法吗?至少指向正确的技术 - xquery、xpath 或 xproc 来完成它。谢谢。
托多
编辑:
为了避免指责我没有做任何研究——这是问题的一部分。我正在尝试确定要使用的 xml 家族的最佳技术。这就是为什么我要寻求解决方案而不是解决方案的方向:)。谢谢。
PS> 当然,如果您能提供解决方案,我将不胜感激,但我不想占用您不必要的时间。
如果您可以将语法更改为与 XPath 兼容,因此它是 $a+$b
而不是 a+b
,那么使用 XSLT 3.0 的 xsl:evaluate 或 eval 就很容易做到() 由各种 XSLT 1.0 和 2.0 处理器以特定于处理器的方式提供的扩展。 3.0 解决方案如下所示:
<xsl:template match="inp"
<xsl:evaluate xpath="eq"
with-params="map:merge(
for $p in data/* return map{node-name($p): data($p)})"/>
</xsl:template>
我想补充一点,我在很多年前为一个客户实现了一个应用程序,并且我已经多次看到类似的事情。在他们的案例中,他们使用的 XML 文件包含确定不同 类 资本支出所需批准级别的公式。
我正在尝试使用 Xquery、Xpath 或 Xproc 评估作为 xml 标记的值插入的等式 - 简单地说就是纯 XML。我是这里的初学者,但我认为它应该是可行的。为了更好地展示我想要实现的目标,请看这个例子:
<inp>
<data>
<a>5</a>
<b>4</b>
</data>
<eq>
a+b
</eq>
</inp>
现在会有一些魔法...因此我想得到类似的东西:
<res>
9
</res>
你能帮我解决其中的魔法吗?至少指向正确的技术 - xquery、xpath 或 xproc 来完成它。谢谢。 托多
编辑: 为了避免指责我没有做任何研究——这是问题的一部分。我正在尝试确定要使用的 xml 家族的最佳技术。这就是为什么我要寻求解决方案而不是解决方案的方向:)。谢谢。 PS> 当然,如果您能提供解决方案,我将不胜感激,但我不想占用您不必要的时间。
如果您可以将语法更改为与 XPath 兼容,因此它是 $a+$b
而不是 a+b
,那么使用 XSLT 3.0 的 xsl:evaluate 或 eval 就很容易做到() 由各种 XSLT 1.0 和 2.0 处理器以特定于处理器的方式提供的扩展。 3.0 解决方案如下所示:
<xsl:template match="inp"
<xsl:evaluate xpath="eq"
with-params="map:merge(
for $p in data/* return map{node-name($p): data($p)})"/>
</xsl:template>
我想补充一点,我在很多年前为一个客户实现了一个应用程序,并且我已经多次看到类似的事情。在他们的案例中,他们使用的 XML 文件包含确定不同 类 资本支出所需批准级别的公式。