我正在嘗試使用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? –