XPath 不适用于 SelectSingleNode
XPath not working with SelectSingleNode
private const string TECHACCOUNTAMTITEM_AMT_XPATH = @"//Part[translate(@Type, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'instalment']/acord:Jv-Ins-Reinsurance/acord:TechAccount/acord:Subaccount/acord:TechAccountAmtItem[translate(@Type, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') != 'ipt' and translate(@AmtStatus, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') != 'informational']/acord:Amt";
var xmlNamespaceManager = this._namespaceManager.GetNamespaceManager(this.TransactionPayload.OuterXml);
var techAccountAmtItemAmt = Decimal.Parse(this.TransactionPayload.SelectSingleNode(TECHACCOUNTAMTITEM_AMT_XPATH, xmlNamespaceManager).InnerText);
以上两条语句给出的值是4500。
但我不想使用翻译,只想直接使用它来获得价值。
似乎 != 在下面不起作用,无法获取值并导致 null 。
这是我正在尝试实现但无法运行的新 Xpath。
private const string TECHACCOUNTAMTITEM_AMT_XPATH = @"//Part[@Type = 'Instalment']/acord:Jv-Ins-Reinsurance/acord:TechAccount/acord:Subaccount/acord:TechAccountAmtItem[@Type != 'ipt' and @AmtStatus != 'informational']/acord:Amt";
我怎样才能达到同样的效果?
原因是!=
要求属性存在,而translate
如果属性缺失也会产生结果。
您需要改用not()
:
.../acord:TechAccountAmtItem[not(@Type = 'ipt') and not(@AmtStatus = 'informational')]/...
这假设 Type
也可能丢失。如果没有,您可以使用 @Type != 'ipt'
代替。
private const string TECHACCOUNTAMTITEM_AMT_XPATH = @"//Part[translate(@Type, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'instalment']/acord:Jv-Ins-Reinsurance/acord:TechAccount/acord:Subaccount/acord:TechAccountAmtItem[translate(@Type, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') != 'ipt' and translate(@AmtStatus, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') != 'informational']/acord:Amt";
var xmlNamespaceManager = this._namespaceManager.GetNamespaceManager(this.TransactionPayload.OuterXml);
var techAccountAmtItemAmt = Decimal.Parse(this.TransactionPayload.SelectSingleNode(TECHACCOUNTAMTITEM_AMT_XPATH, xmlNamespaceManager).InnerText);
以上两条语句给出的值是4500。
但我不想使用翻译,只想直接使用它来获得价值。
似乎 != 在下面不起作用,无法获取值并导致 null 。
这是我正在尝试实现但无法运行的新 Xpath。
private const string TECHACCOUNTAMTITEM_AMT_XPATH = @"//Part[@Type = 'Instalment']/acord:Jv-Ins-Reinsurance/acord:TechAccount/acord:Subaccount/acord:TechAccountAmtItem[@Type != 'ipt' and @AmtStatus != 'informational']/acord:Amt";
我怎样才能达到同样的效果?
原因是!=
要求属性存在,而translate
如果属性缺失也会产生结果。
您需要改用not()
:
.../acord:TechAccountAmtItem[not(@Type = 'ipt') and not(@AmtStatus = 'informational')]/...
这假设 Type
也可能丢失。如果没有,您可以使用 @Type != 'ipt'
代替。