2012-03-28 58 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反序列化爲一個對象..然後你可以使用該對象來獲得你的配置項,而且你不必惹上那個瘋狂的句法。 – 2012-03-28 12:19:14

+0

你確定這可以嗎?我得到了'部分必須每個配置文件只出現一次。請參閱幫助主題以瞭解異常情況。當我嘗試從「web.config」或「app.config」文件中獲取該錯誤時出現錯誤。你能否更新問題以包含如何重現此問題的說明? – AYK 2012-04-17 10:32:02

回答

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爲好,如果你想要做一個DateTime檢查等我也可以更容易地進行可變注射,而不是"//Sms[@tip='" + variable + "']"。 XPathElement只是XPath().FirstOrDefault()來返回一個元素。