如何在XML ArrayOfString中获取特定字符串?

如何在XML ArrayOfString中获取特定字符串?,xml,xpath,app-config,xpath-2.0,arrayofstring,Xml,Xpath,App Config,Xpath 2.0,Arrayofstring,我有一个由VS生成的配置文件: <?xml version="1.0" encoding="utf-8" ?> <configuration> <applicationSettings> <FMR.OrdersRouter.Service.Properties.Settings> <setting name="UseSQL" serializeAs="String"> <value>T

我有一个由VS生成的配置文件:

<?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>
但它仅适用于字符串数组中的第一个字符串

有什么建议吗

substring-after()
需要一个单例参数,因此当参数表达式返回多个值时,只考虑第一个值。假设
string
值在给定的
ArrayOfString
中总是唯一的,那么您可以这样做(路径简化只是为了给出一个易于阅读的示例):


XPath作为
substring-after()
字符串
元素的第一个参数传递,该元素包含文本
'BUYPOWER:'

是否意味着只有当目标
的第一个子元素时,XPath才有效(因此在上面的示例中,它只适用于查找
MAXMOFMARGIN:
)?是的。这正是我的意思。我认为这是因为在每个子字符串之间有一条新行,路径返回子字符串afterNICE的第一个参数。它的工作:-)谢谢现在我想用在我的nsis纸条文件。我还使用了NsisXML插件(由Wizou提供)。那么,如何将substring-after()的返回值转换成var呢?@user2787787不客气。请考虑这个答案,因为它解决了这个问题。@ USER 27 8877不幸的是,我对NISXML一无所知。
substring-after(/configuration/applicationSettings/FMR.OrdersRouter.Service.Properties.Settings/setting[@name="CreditChecks"]/value/ArrayOfString/string, 'BUYPOWER:')
substring-after(//ArrayOfString/string[contains(.,'BUYPOWER:')], 'BUYPOWER:')