我正在使用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标记中包装内部文本会插入文本,但会使用其实体“&amp; gt;”替换大字符和小字符。和“&amp; 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')"
但无济于事。我刚接受这种语法,还是完全有另一种解决方案?
提前感谢您的帮助!
答案 0 :(得分:2)
我没有工具来验证这是否有效,但我会尝试用它们的实体(>
和<
)替换它们,但不要将它包装在CDATA块中。实体本质上是原始XML的“转义序列”。