xml - 在安装过程中,如何将大于和小于字符插入由WiX修改的XML文件中?

标签 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标记中会插入文本,但用其实体“&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')"


但无济于事。我是刚刚使用这种语法,还是完全有其他解决方案?

在此先感谢您的帮助!

最佳答案

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

关于xml - 在安装过程中,如何将大于和小于字符插入由WiX修改的XML文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3441891/

相关文章:

java - Android 远程 XML 解析(文档生成器)

sql-server - 使用 xquery 压缩 xml 节点?

c# - 使用 HTMLAgilityPack c# 按类名删除元素

javascript - 如何在 JavaScript 中根据 XSD 1.1 验证 XML?

java - 如何通过 SOAP UI 与 CDATA 中的 CDATA 向 Java 应用程序发送请求?

xslt - 查找每两个处理指令之间的所有XML节点

xslt - 在 XSLT/XPath 中,如何获取与特定名称不匹配的第一个属性?

wix - 在 Visual Studio 2008/2010 中无法看到 WIX 项目类型

msbuild - 我应该让热量产生 guids 吗?在编译期间尝试自动生成时出错,因为我没有使用标准目录

wix获取用户输入