我正在使用WiX为我的应用程序编写Windows安装数据库。我已经在我的应用程序中安装了一个XML文件,该文件需要填充在安装过程中获得的信息。原则上,WiXUtilExtension标记util:XmlFile和util:XmlConfig是实现此目的的好方法,但是它们并不能完全解决我的问题。具体来说,我需要插入一些javascript:
<?js
//some javascript that must include formatted string properties
//so that [PropertyName] evaluates to its value during installation
?>
但是使用该文本作为util:XmlFile / @ Value属性的值,它将无法编译(不足为奇-错误CNDL0104)。而且,反斜杠和[\](方括号的转义序列)似乎都不能转义大于或小于字符。
我还尝试将插入的文本放入util:XmlConfig元素的内部文本中,但是在存在Javascript标记的情况下,它只是忽略了该文本。将内部文本包装在CDATA标记中会插入文本,但用其实体“&gt;”替换大于和小于字符。和“&lt;”,不带引号和空格。
诀窍是什么?
编辑:仍在努力解决此问题,但更多详细信息可能有助于进一步阐明。这是一个XML文件的示例,其结构在安装时需要修改。
<?xml version="1.0"?>
<RootElement>
<SubElement>
<?js
//insert Javascript here with formatted property values e.g. [PropertyName]
?>
</SubElement>
</RootElement>
在我的WiX代码中,我有:
<util:XmlConfig Id="EditXml" File="foo.xml" Action="create" Node="value" On="install" ElementPath="//RootElement/SubElement" Sequence="1" >
<![CDATA[//the Javascript code]]>
</util:XmlConfig>
当然,它会将文本放在Javascript处理指令的旁边,而不是放在其中。因此,我考虑使用XPath访问XML处理指令标签,以为我可能没有为util:XmlConfig / @ ElementPath属性使用正确的值。我以前从未使用过XPath,但是我认为可以进行以下更改之一:
ElementPath="//RootElement/SubElement/processing-instruction('js')"
ElementPath="processing-instruction('js')//RootElement/SubElement"
ElementPath="//processing-instruction('js')"
ElementPath="processing-instruction('js')"
但无济于事。我是刚刚使用这种语法,还是完全有其他解决方案?
在此先感谢您的帮助!
最佳答案
我没有工具来验证此方法是否有效,但是我将尝试用其实体(>
和<
)替换它们,但不要将其包装在CDATA块中。实体本质上是原始XML的“转义序列”。
关于xml - 在安装过程中,如何将大于和小于字符插入由WiX修改的XML文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3441891/