2017-12-21 12 views
2
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は、XPath SELECTSINGLENODE

を与えます。しかし、私は翻訳し、値だけをfetechに直接それを使いたい使いたいいけません。

!=が以下のように動作していないため、値を取得せずに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"; 

どのようにすれば同じことができますか?

答えて

2

!=は属性が存在する必要があり、属性がない場合はtranslateも結果を生成するためです。

代わりnot()を使用する必要があります。

.../acord:‌​TechAccountAmtItem[not(@‌​Type = 'ipt') and not(@AmtStatus = 'informational')]/... 

これはTypeが同様に失われる可能性があることを前提としています。そうでない場合は、代わりに@Type != 'ipt'を使用できます。

+0

MSDNの[not()not not()]と非常に多くのキーワードを試しましたが、何時間も働かなかった。今回は試してみましたが、それは魅力のように働いていました。ありがとう:) (@Type = 'insurance_premium_tax')ではなく(@AmtStatus = 'informational')] – RahulJha