2012-03-26 3 views
0

그래서 xmlDocument가 있고 신용 점수가 추가되었는지 확인해야합니다. 이렇게하려면 xmlNodes.SelectSingleNode를 사용하고 innerText를 확인하고 있습니다.XML 문서에서 노드를 선택 하시겠습니까?

문제점 : 노드 중 하나에 실제 노드 이름에 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 //에 대해 null이됩니까? –

+0

맨 위 요소 문서를보십시오. 그것 (또는 다른 요소)에'xmlns' 속성이 있습니까? 그렇다면이 의사 속성은 XPath의 null 네임 스페이스와 다른 기본 네임 스페이스를 선언합니다. 그것이 빈 결과를 얻는 이유입니다. 네임 스페이스는 각 요소 이름의 일부입니다. –

답변

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); } 
    } 
} 
관련 문제