2017-03-14 9 views
0

저는 C#을 처음 접했고 XmlElement와 SingleNode Method를 사용하기 시작했습니다. 어떤 이유로 "customSettings"는 XML 문서가 올바르게로드되었지만 null을 계속 반환합니다. 그것을 문자열로로드하여 확인했습니다. 내가 지금까지 코멘트에 시도를 포함하여 상상할 수있는 모든 것을 시도했습니다. 어떤 도움이나 제안을 많이 주시면 감사하겠습니다. 여기 내 XML 문서입니다 :C# XmlElement : 항상 Nulll을 반환하는 이유는 무엇입니까?

EDIT : Coding Yoshi의 솔루션과 함께 작동하지만 더 좋은 방법이 있습니까?

는 편집 : user.config에 NameValueCollection은 만 예외를 읽을 해결하기 위해 NSGaga에 대한 XML 코드를 변경

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="users_fächer" type="System.Configuration.NameValueSectionHandler" /> 
    </configSections> 
    <users_faecher> 
    <add key="user1" value="value1" /> 
    <add key="user2" value="value2" /> 
    </users_faecher> 
</configuration> 

코드 :

string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Users.config"); 
string new_fächer = input[1]; 
ExeConfigurationFileMap configMap = new ExeConfigurationFileMap(); 
configMap.ExeConfigFilename = dir; 
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None); 

ConfigurationSection myParamsSection = config.GetSection("users_faecher"); 

string myParamsSectionRawXml = myParamsSection.SectionInformation.GetRawXml(); 
XmlDocument sectionXmlDoc = new XmlDocument(); 
sectionXmlDoc.Load(new StringReader(myParamsSectionRawXml)); 
NameValueSectionHandler handler = new NameValueSectionHandler(); 

NameValueCollection users_fächer = handler.Create(null, null, sectionXmlDoc.DocumentElement) as NameValueCollection; 

users_fächer.Set(user, new_fächer); 
config.Save(ConfigurationSaveMode.Modified, true); 
+0

는 니콜라스는 당신이 작은 콘솔 프로젝트를 게시 할 수있는 -은'var에 customSettings NameValueCollection은 같은 = ConfigurationManager.GetSection는 ("데이터/faecher");'null을 반환해서는 안, 모두가 올바른 것입니다. 그리고 설정 파일을 XML로 로딩해서는 안된다. :) 여기에 다른 문제가 있습니다. 당신이하는 일이 무엇인지 모르겠습니다. 그래서 당신이 그것과 그 한 줄을 가지고 다른 모든 것들을 그냥 설정하십시오. – NSGaga

+0

@ NSGaga는 섹션을 여는 데 문제가 발견되었지만 NameValueCollection의 set-method를 시도 할 때 그것의 사용자 지정 사용자 .config가 아니라 app.config. ive는 내가 지금 무엇을 가지고 있는지보기 위해 코드와 xml 데이터를 편집했습니다. – Nikolas

+0

@NSGaga 모두 지금 편집되었습니다. 왜 내가 편집하지 못하게하는지 전혀 모르십니까? – Nikolas

답변

1

이 당신에게 처음 add 요소 얻을 것이다 :

doc.ChildNodes[0].NextSibling.ChildNodes[1].ChildNodes[0].ChildNodes[0]; 

이렇게하면 처음으로 add elem이 표시됩니다. ent의 value 속성

doc.ChildNodes[0].NextSibling.ChildNodes[1] 
    .ChildNodes[0].ChildNodes[0].Attributes["value"].Value; 
+0

이 작업은 지금 진행 중입니다. 이전 키를 수정하거나 모든 하위 항목을 반복하지 않아도 올바른 키 속성을 찾을 수있는 방법을 알고 싶습니다. – Nikolas

+0

필요한 대상 요소를 찾기 위해 반복적으로 신경을 쓰는 이유는 무엇입니까? 당신이 성과에 대해 걱정한다면 : 얼마나 자주 이것을 할 것입니까? 이것이 병목 현상이되고 있습니까? – CodingYoshi