我想选择第二个MyElement,如果它已经不存在:
<util:XmlConfig Id="CreateMyElement"
File="[#MyXml.xml]"
Action="create"
ElementPath="/path/to/the/MyElement[2]/next/items"
VerifyPath="/path/to/the/MyElement[2]/next/items/itemToAdd[\[]@MyAttribute='MyValue'[\]]"
Name="itemToAdd"
Node="element"/>
不幸的是,MyElement [2]不起作用。为什么?
答案 0 :(得分:0)
我认为你的VerifyPath的价值应该在ElementPath中,我也不认为Element[2]
会工作,而是使用类似的东西:
/configuration/system.diagnostics/sources/source[\[]@name='Bla.Bla.Services.Mobile.UpdateService'[\]]/listeners/add
答案 1 :(得分:0)
例如parent/MyElement[2]
形式的XPath表达式将在每个<MyElement>
中每隔一秒<parent>
拉出一次:
<parent>
<MyElement>foo</MyElement>
<MyElement>bar</MyElement><!-- This one will be returned by XPath -->
</parent>
如果XML文档中的所有<parent>
元素只有一个或少于<MyElement>
子元素,那么您的XPath将不返回任何内容。如果您只想返回与XPath开头部分匹配的所有<MyElement>
中的第二个<MyElement>
元素,则需要使用括号,例如:
(/path/to/the/MyElement)[2]/next/items
答案 2 :(得分:0)
WiX中的xpath似乎基于0
在wix .wxs文件中使用以下内容
<util:XmlFile
Id="SetLogPath"
Action="setValue"
File="[INSTALLFOLDER]Web.config"
ElementPath="/configuration/log4net/appender[\[]0[\]]/file"
Name="value"
Value="[CONFIGDIR]\logs\log.log"/>
<util:XmlFile
Id="SetWarningLogPath"
Action="setValue"
File="[INSTALLFOLDER]Web.config"
ElementPath="/configuration/log4net/appender[\[]1[\]]/file"
Name="value"
Value="[CONFIGDIR]\logs\warnings.log"/>
更新了以下2个节点。
<?xml version="1.0"?>
<configuration>
<log4net>
<appender name="NormalLog" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.RollingFileAppender "/>
<file value="D:\Config\logs\log.log"/>
<threshold value="DEBUG"/>
<appendToFile value="true"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="10MB"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%2thread] %-5level %-35.50logger{2} %message%newline"/>
</layout>
</appender>
<appender name="WarningsLog" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.RollingFileAppender "/>
<file value="D:\Config\logs\warnings.log"/>
<threshold value="WARN"/>
<appendToFile value="true"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="10MB"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%2thread] %-5level %-35.50logger{2} %message%newline"/>
</layout>
</appender>
我尝试首先使用基于1的索引,但是第二个节点已使用log.log更新,然后安装程序无法尝试更新找不到的节点。