如何在安装期间将大字符和小字符插入由WiX修改的XML文件中?

时间:2010-08-09 16:02:33

标签: xml xpath wix windows-installer escaping

我正在使用WiX为我的应用程序创建Windows安装数据库。我有一个随我的应用程序一起安装的XML文件,需要填写安装期间获得的信息。原则上,WiXUtilExtension标记util:XmlFileutil: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')"

但无济于事。我刚接受这种语法,还是完全有另一种解决方案?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我没有工具来验证这是否有效,但我会尝试用它们的实体(&gt;&lt;)替换它们,但不要将它包装在CDATA块中。实体本质上是原始XML的“转义序列”。