2016-09-07 4 views
0

현재 사용자가 업데이트 한 목록보기가 포함 된 Windows 양식 응용 프로그램이 있습니다. 목록보기가 업데이트되면 항목에 대한 XML도 채워지고 만들어지고 저장 요청이 전송 될 때까지 숨겨진 텍스트 상자에 저장됩니다.NullReferenceException XML을 업데이트하려고 시도 할 때 C#

저장 요청이 전송되면 외부 구성 파일에 기록하여 지정된 속성을 업데이트하는 함수를 호출합니다.

나는 7 설정을 업데이트하고있어 총에서

,하지만 난 값을 볼 수있는 시계를 추가했다

//The values I'm passing in are the path to my config file, the setting I am updating (in this case would be RequiredDocuments), and the string value to update. 

public static void UpdateConfigFiles(string p_sPath, string p_sSettingName, string p_sValue) 
{ 
    bool blnApplyChanges = false; 
    System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); 

    xmlDoc.Load(p_sPath); 
    int iCurrentNode = 0; 

    for (iCurrentNode = 0; iCurrentNode <= xmlDoc.ChildNodes[1]["applicationSettings"].ChildNodes[0].ChildNodes.Count - 1; iCurrentNode++) 
     if (xmlDoc.ChildNodes[1]["applicationSettings"].ChildNodes[0].ChildNodes[iCurrentNode].Attributes[0].Value.ToString().ToUpper() == p_sSettingName.ToUpper()) 
    { 
     //This line is where the exception occurs 
     xmlDoc.ChildNodes[1]["applicationSettings"].ChildNodes[0].ChildNodes[iCurrentNode].ChildNodes[0].InnerText = p_sValue; 
     blnApplyChanges = true; 
    } 

    if (blnApplyChanges) 
    { 
     xmlDoc.Save(p_sPath); 
     FixBlankXMLValues(p_sPath); 
    } 
} 

는 XML을 목록보기를 업데이트하고 저장하려고하면 NullReferenceException이 실패있는 유일한 사람입니다 모든 다른 노드 중 아직 null 값이 나오지 않았으므로 XML을 구조화 한 방식에 문제가 있는지 궁금합니다. 처음에는 ListView를 리바 인딩 할 때 전달 된 값을 지우고 있다고 생각했지만 그럴 수는 없습니다.

Here은 수정 된 정보가있는 XML의 샘플 구조입니다.

+0

속담에 대한 대답을 읽고 더 이상 혼동하지 마십시오. – Will

+0

@ 왜 이런 일이 일어나고 있으며 NullReferenceException ~가 ~입니다. 그러나이 질문은 XML에만 해당되며이 질문을 중복으로 표시하는 것은별로 도움이되지 않습니다. 이전에 그 답변을 이전에 참조한 적이 있습니다. 어쨌든 그것을 게시 해 주셔서 감사합니다. – confusedandamused

+0

귀하의 질문에 아무것도 (1) ​​당신이 이것을 디버깅했는지, 2) 당신이 어떤 코드가 NRE를 던지고 있는지, 3) 예외를 고칠 수 없는지를 나타냅니다. 중복 질문은 1과 2를 통해 안내합니다. 3 번으로 도움을 요청하기 전에 정말로해야합니다. 1, 2, 3을 포함하도록 [편집] 할 수 있다면, @ me와 기꺼이 다시 열어 드리겠습니다. – Will

답변

0
<setting name="RequiredDocuments" serializeAs="String">  
</setting> 

에는 업데이트 할 '값'이 없습니다.

xmlDoc.ChildNodes [1] [ "applicationSettings"]. childNodes에 [0] = <Project.Properties.Settings>

xmlDoc.ChildNodes [1] [ "applicationSettings"]. childNodes에 [0] .ChildNodes [iCurrentNode = <setting name="RequiredDocuments" serializeAs="String">

xmlDoc.ChildNodes [1] [ "applicationSettings"]. ChildNodes [0] .ChildNodes [iCurrentNode] .ChildNodes [0] 이 NULL입니다.

+0

본질적으로 업데이트하려고하는 노드에는 자식 노드가 없습니다. 그래서 null입니까? 그래서 에 자식 노드를 추가 <설정 이름 = "RequiredDocuments"serializeAs = "문자열"> 그래서 솔루션이 것 <설정 이름 = "RequiredDocuments"serializeAs = "문자열"> confusedandamused

+0

@confusedandamused : 아니요. 코드를 수정하십시오. 임의의 XML 요소를 어딘가에 추가하지 마십시오. –

+0

@ 토마스 귀하의 제안에 의해 내가 찾고있을 것입니다 ... xmlDoc.ChildNodes [1] [ "applicationSettings"] .ChildNodes [iCurrentNode] = <설정 이름 = "RequiredDocuments"serializeAs = "문자열" > "value"라는 이름의 새 요소를 추가하여 다른 요소와 일치시키고, 그 안에 또 다른 새로운 요소를 추가하십시오. 어느 것이 좋습니다. 그러나 이미 다른 곳에서 새 요소에 대한 XML을 작성하고 있으므로 추가 단계라고 생각합니다. – confusedandamused

관련 문제