2012-03-26 14 views
0

私はxmlDocumentを持っており、クレジットスコアが追加されたかどうかを確認する必要があります。これを行うには、xmlNodes.SelectSingleNodeを使用して、innerTextをチェックしています。XML文書内からノードを選択していますか?

私の問題はこれです:ノードの1つに実際のノード名にIDフィールドがあります。だから私はC#がノード名の一部としてそれを解釈していると思います。

public void DeperPostAppend() 
    { 
     DirectoryInfo CompDir = new DirectoryInfo(FilePrep.CompletedDirectory); 

      foreach (FileInfo File in CompDir.GetFiles()) 
      { 
       // Load xml documents for sorting 
       XmlDocument xmlDoc = new XmlDocument(); 
       try 
       { 
        xmlDoc.Load(File.FullName); 
       } 
       catch 
       { 
        if (File.Extension != ".xml") 
         return; 
       } 

      //XmlNode auto = xmlDoc.SelectSingleNode("//ACORD//InsuranceSvcRq//PersAutoPolicyQuoteInqRq"); 
      XmlNode home = xmlDoc.SelectSingleNode("//ACORD//InsuranceSvcRq//HomePolicyQuoteInqRq"); 
      XmlNode creditAuto = xmlDoc.SelectSingleNode("//ACORD//InsuranceSvcRq//PersAutoPolicyQuoteInqRq//PersPolicy//CreditScoreInfo//CreditScore"); 
      XmlNode creditHome = xmlDoc.SelectSingleNode("//ACORD//InsuranceSvcRq//HomePolicyQuoteInqRq//PersPolicy//CreditScoreInfo//CreditScore"); 

       //if file is type home quote 
      if (File.Extension == ".xml" && creditHome != null) 
       { 
        if (creditHome.InnerText != "ERR" || creditHome.InnerText != "NOH") 
        { 
         DeperHome(); 
        } 
       } 
       //If file is type Auto Quote 
      else if (File.Extension == ".xml" && creditAuto != null) 
       { 
        if (creditAuto.InnerText != "ERR" || creditAuto.InnerText != "NOH") 
        { 
         DeperAuto(); 
        } 
       } 
      } 

    }//end DeperPostAppend 

// ACORD // InsuranceSvcRq // HomePolicyQuoteInqRq // PersPolicy // CreditScoreInfo // CreditScore

PersPolicy問題がどこにあるかです。ノードは文書上でこのように見えます。

<PersPolicy id="AE4562BEE086A92470D4"> 

すべてのドキュメントが変更され、何千ものドキュメントが処理されるため、id部分を無視します。

+0

を次のように私はそれはあなたのidフィールドのような属性を持つ任意の問題があってはならないノードを処理するためのクラスを使用することにしました。 XMLのダミーバージョンを投稿できますか?また、あなたはこの '// ACORD // InsuranceSvcRq // HomePolicyQuoteInqRq // 'のノードを取得できますか?そうであれば、この' // ACORD // InsuranceSvcRq // HomePolicyQuoteInqRq // 'のためにヌルになりますか? –

+0

最上位の要素文書を見てください。それ(または他の要素)に 'xmlns'属性がありますか?その場合、この擬似属性は、XPathのヌル名前空間とは異なるデフォルトの名前空間を宣言します。だからあなたは空の結果を得ているのです。名前空間は各要素の名前の一部です。 –

答えて

0

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Xml.Linq; 


/// <summary> 
/// 
/// </summary> 

public class PersPolicy 
{ 
    XElement self; 
    public PersPolicy(XElement self) { this.self = self; } 

    public CreditScoreInfo CreditScoreInfo { get { return _CreditScoreInfo ?? (_CreditScoreInfo = new CreditScoreInfo(self.Element("CreditScoreInfo"))); } } 
    CreditScoreInfo _CreditScoreInfo; 

    public string PolicyNumber 
    { 
     get { return (string)self.Element("PolicyNumber"); } 
     set { self.Element("PolicyNumber").SetValue(value); } 
    } 
} 

/// <summary> 
/// 
/// </summary> 
public class CreditScoreInfo 
{ 
    XElement self; 
    public CreditScoreInfo(XElement self) { this.self = self; } 

    public string CreditScore 
    { 
     get { return (string)self.Element("CreditScore"); } 
     set { self.Element("CreditScore").SetValue(value); } 
    } 
    public string CreditScoreDt 
    { 
     get { return (string)self.Element("CreditScoreDt"); } 
     set { self.Element("CreditScoreDt").SetValue(value); } 
    } 
} 
関連する問題