抱歉,如果以下问题措辞不当,我对 XML 中所有正确术语的经验有限。
所以我最近一直在使用 XSLTForms 作为一种快速生成测试数据的 xml 表示以进入我的工作场所 LIMS 系统的方法。但是,由于必须形成 xml 的方式,我似乎遇到了 XSLTForms 或我正在使用的 XPath 语法的障碍。
简化我的 xml 格式以制作一个小的工作示例 xhtml 文件如下:
<?xml-stylesheet href="xsltforms/xsltforms.xsl" type="text/xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ev="http://www.w3.org/2001/xml-events">
<head>
<title>Example Test</title>
<xf:model>
<xf:instance>
<root xmlns="">
<child name="one" value=""></child>
<child name="two" value=""></child>
<child name="three" value=""></child>
</root>
</xf:instance>
<xf:bind id="ChildOne" ref="child[@name='one']" type="xs:decimal" />
<xf:bind id="ChildTwo" ref="child[@name='two']" type="xs:decimal" />
<xf:bind id="ChildThree" ref="child[@name='three']" calculate="../child[@name='one'] - ../child[@name='two']"
type="xs:decimal" />
</xf:model>
</head>
<body>
<xf:input bind="ChildOne">
<xf:label>Node One:</xf:label>
</xf:input>
<xf:input bind="ChildTwo">
<xf:label>Node Two:</xf:label>
</xf:input>
<xf:output ref="child[@name='three']">
<xf:label>Node Three Calculation:</xf:label>
</xf:output>
</body>
</html>
这可以正常工作,输入存储在相关节点中,最终绑定标记中的计算属性计算出 ChildOne 和 ChildTwo 的差异,后者存储在 ChildThree 中。最后,输出标签显示 ChildThree 节点的值。
当 Xpath 表达式中的值存储在打开和关闭子节点之间时,bind 中的计算属性可以正常工作,例如:
<child name="ChildOne" value="">10</child>
但正如我在开始时提到的,xhtml 代码是一个工作示例,当我开始调整代码以匹配 LIMS 系统的 XML 结构时,事情就中断了。
如果我将绑定更改为使用 @value 引用子节点的 value 属性:
<xf:bind id="ChildOne" ref="child[@name='one']/@value" type="xs:decimal" />
<xf:bind id="ChildTwo" ref="child[@name='two']/@value" type="xs:decimal" />
<xf:bind id="ChildThree" ref="child[@name='three']/@value" calculate="../child[@name='one']/@value - ../child[@name='two']/@value"
type="xs:decimal" />
同时更新输出 ref 属性,如下所示:
<xf:output ref="child[@name='three']/@value">
<xf:label>Node Three Calculation:</xf:label>
</xf:output>
value 属性的分配似乎适用于绑定到输入标签的 ChildOne 和 ChildTwo。这从我的工作代码 xml 输出中得到证实,但计算无法正常工作,只有零存储在 value 属性中。
我在计算属性 XPath 表达式中遗漏了什么吗?
calculate="../child[@name='one']/@value - ../child[@name='two']/@value"
任何帮助将不胜感激,在此先感谢您。