我正在尝试使用NMatrix的Schematron来验证C#中的XML。 如果我将“f”名称空间留在名称空间管理器(nsManager)之外,那么执行此代码时会出现以下异常:未声明的名称空间前缀 - f。Schematron断言规则设置上下文时失败
CompiledXPathExpression _expr;
...
_expr.SetContext(nsManager);
对于Schematron的线路:
<sch:rule context="/f:Patient/f:identifier/f:period">
添加 “F” 的命名空间后, “规定” 线完成,但我得到的异常: 无法识别的扩展功能的命名空间:前缀= '' ,当执行相同的代码时,命名空间URI ='' 。
CompiledXPathExpression _expr;
...
_expr.SetContext(nsManager);
在接下来的Schematron行:
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
一些实验后,我发现这工作:
<sch:rule context="/f:Patient/f:identifier/f:period">
<sch:assert test="f:start">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
</sch:rule>
但这种失败:
<sch:rule context="/f:Patient/f:identifier/f:period">
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
end</sch:assert>
</sch:rule>
我想我有某种名字空间公关首先,我现在开始怀疑这个语法是否对XPathExpression更有效
您使用XPath 1.0还是2.0? –