2016-03-30 34 views
1

VS tarafından oluşturulan bir yapılandırma dosyası vardır:XML ArrayOfString'de belirli dizeler nasıl alınır?

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <applicationSettings> 
    <FMR.OrdersRouter.Service.Properties.Settings> 
     <setting name="UseSQL" serializeAs="String"> 
     <value>True</value> 
     </setting> 
     <setting name="MaxNumOfConnectionsPerUser" serializeAs="String"> 
     <value>10</value> 
     </setting> 
     <setting name="DataPath" serializeAs="String"> 
     <value>C:\Program Files\Common Files\OrdersRouter</value> 
     </setting> 
     <setting name="CreditChecks" serializeAs="Xml"> 
     <value> 
      <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
      <string>MAXMOFMARGIN:False</string> 
      <string>BRSMAXASHRAI:True</string> 
      <string>ADDCASH:False</string> 
      <string>BUYPOWER:True</string> 
      </ArrayOfString> 
     </value> 
     </setting> 
     <setting name="InternalOrdersRouterServerIP" serializeAs="String"> 
     <value>172.25.2.186</value> 
     </setting> 
    </FMR.OrdersRouter.Service.Properties.Settings> 
    </applicationSettings> 
</configuration> 

ve ben ArrayOfString belirli bir dize almak istiyorum. "BUYPOWER:" veya

bu çalıştı: "MAXMOFMARGIN:" veya "BRSMAXASHRAI:" veya "ADDCASH" Ben sonra Doğru/Yanlış değerini almak gerekir

substring-after(/configuration/applicationSettings/FMR.OrdersRouter.Service.Properties.Settings/setting[@name="CreditChecks"]/value/ArrayOfString/string, 'BUYPOWER:') 

Ama sadece çalışır dize dizisindeki ilk dize.

Herhangi bir öneriniz var mı?

+0

Eğer XPath'in sadece 'hedefinin öğesinin ilk alt öğesi olması durumunda çalışacağını kastediyorsunuz (yani yukarıdaki örnekte, sadece" MAXMOFMARGIN: 'bulmak için çalışır)? – har07

+0

Evet. Tam olarak demek istediğim bu. Sanırım her çocuk dizesi arasındaki yeni satırın yolu, alt dizenin ilk argümanı için – user2787787

cevap

0

substring-after() tekil argümanını bekler; böylece argüman ifadeniz birden fazla değer döndürdüğünde, yalnızca ilk değer dikkate alınacaktır.

substring-after(//ArrayOfString/string[contains(.,'BUYPOWER:')], 'BUYPOWER:') 

XPath substring-after() içeren string eleman ilk argüman olarak geçer: string değerleri her zaman bir ArrayOfString verilen içinde benzersiz olduğunu varsayarsak, o zaman bu tarafa (yol sadece kolay okunabilir bir örnek vermek basitleştirilmiş) yapabilirsiniz metin 'BUYPOWER:'.

+0

NICE. Çalışıyor :-) Teşekkürler Şimdi nsis komut dosyamda kullanmak istiyorum. Ayrıca NsisXML eklentisini de kullanıyorum (Wizou tarafından). Peki, substring-after() öğesinin döndürülen değerini var olarak nasıl alabilirim? – user2787787

+0

@ user2787787 Rica ederim. Lütfen söz konusu sorunu çözdüğü için bu yanıtı [kabul et] (http://stackoverflow.com/help/someone-answers) düşünün. – har07

+0

@ user2787787 maalesef NsisXML hakkında hiçbir şey bilmiyorum – har07