【问题标题】:How to get specific string in XML ArrayOfString?如何获取 XML ArrayOfString 中的特定字符串?
【发布时间】:2016-07-17 23:16:31
【问题描述】:

我有一个 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>

我想从 ArrayOfString 中获取特定的字符串。我需要在“MAXMOFMARGIN:”或“BRSMAXASHRAI:”或“ADDCASH:”或“BUYPOWER:”之后获取值True/False

我试过这个:

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

但它只适用于字符串数组中的第一个字符串。

有什么建议吗?

【问题讨论】:

  • 你的意思是你的XPath只有在目标&lt;string&gt;&lt;ArrayOfString&gt;的第一个子元素时才有效(所以在上面的例子中,它只能找到MAXMOFMARGIN:)?
  • 是的。这正是我的意思。我认为这是因为路径为 substring-after 的第一个参数返回的每个子字符串之间的新行

标签: xml xpath app-config xpath-2.0 arrayofstring


【解决方案1】:

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

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

XPath 作为substring-after() 的第一个参数传递包含文本'BUYPOWER:'string 元素。

【讨论】:

  • 不错。它有效:-) 谢谢现在我想在我的 nsis 脚本文件上使用。我还在使用 NsisXML 插件(由 Wizou 提供)。那么如何将 substring-after() 的返回值转换为 var 呢?
  • @user2787787 不客气。请考虑accept这个答案,因为它解决了问题。
  • @user2787787 不幸的是,我对 NsisXML 一无所知
猜你喜欢
  • 2020-03-20
  • 2016-08-23
  • 2019-01-07
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多