2012-03-28 1 views
2

SMS xml의 tip 속성에 따라 SMS 섹션 블록을 선택하고 싶습니다. 현재 : ConfigurationManager.GetSection("Logger/Sms") 작품이 있지만 ConfigurationManager.GetSection("Logger/Sms[@tip='VF']") 같은 섹션을 얻을 수있는 방법이 있습니까?xml 속성으로 섹션 필터링하기

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <sectionGroup name="Logger"> 
     <section name="Sms" type="caSectionTest.LogHandler, caSectionTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
    </sectionGroup> 
    </configSections> 

    <Logger> 
    <Sms tip="Clickatell"> 
     <icerik>Soğuk zincir uygulamasından gönderilen sms</icerik> 
     <telNo>9053123123123</telNo> 
     <api>3363050</api> 
     <user>pkUser</user> 
     <pass>passhm</pass> 
    </Sms> 
    <Sms tip="Vodafone"> 
     <icerik>write something into sms</icerik> 
     <telNo>905123123123</telNo> 
     <originator>336123</originator> 
     <user>ctUser</user> 
     <pass>9Mdfpass</pass> 
    </Sms> 
    </Logger> 
</configuration> 
+2

내가 사용하는 트릭 중 하나가 전체 섹션을 잡아내는 것입니다 ... 객체에 xml을 비 직렬화 한 다음 객체를 사용하여 구성 항목을 얻을 수 있고 그 미친 짓을하지 않아도됩니다. 통사론. –

+0

이 기능이 제대로 작동합니까? 섹션을 설정 파일 당 한 번만 표시해야합니다. 'web.config' 또는'app.config' 파일에서 이것을 가져 오려고 할 때 에러가 발생했습니다. 도움말 항목 exceptions를보십시오. 문제를 재현하는 방법에 대한 지침을 포함하도록 질문을 업데이트 할 수 있습니까? – AYK

답변

0

당신은 아마 오래전에 이동했습니다,하지만 난 여기에 최근에 사용 가능한 XML XElement를 위해하는 XPath 조회를 만든 : https://github.com/ChuckSavage/XmlLib/를 원하는 정보를 얻을 수 jsobo의 의견을 사용합니다.

당신은 그것을 좋아 사용합니다 :

XElement root = XElement.Load(file); 
XElement sms = root.XPathElement("//Sms[@tip={0}]", "VF"); // or "//Sms[@tip='VF']" 

을 인 String.format() 구문을 사용하여, 당신은뿐만 아니라 XPath에에 유형을 통과하면, 등 I를 날짜 시간 체크를하고 싶어하는 경우 또한 "//Sms[@tip='" + variable + "']" 대신에 다양한 주사를 사용하는 것이 더 쉽습니다. XPathElement는 단일 요소를 반환하기 위해 단지 XPath().FirstOrDefault()입니다.